Browse Source

新增角色样式

lihuilin/feature-20250715112412-金币二期
lihuilin 3 weeks ago
parent
commit
1c1a82e955
  1. 3
      .env.development
  2. 4
      .env.production
  3. 3
      .env.test
  4. 2
      src/views/home.vue
  5. 367
      src/views/permissions/permission.vue
  6. 131
      src/views/workspace/index.vue

3
.env.development

@ -1,3 +1,4 @@
VITE_API_BASE='https://hwjb.homilychart.com/dev/admin'
# VITE_API_BASE='https://hwjb.homilychart.com/dev/admin'
VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload VITE_UPLOAD_URL=http://39.101.133.168:8828/hljw/api/aws/upload
VITE_API_BASE='http://192.168.8.246:8081/'

4
.env.production

@ -1,3 +1,3 @@
VITE_API_BASE='https://hwjb.homilychart.com/prod'
# VITE_API_BASE='http://192.168.8.232:8080/'
# VITE_API_BASE='https://hwjb.homilychart.com/prod'
VITE_API_BASE='http://192.168.8.246:8081/'
VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload

3
.env.test

@ -1,4 +1,5 @@
# VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_prod' # VITE_API_BASE='https://hwjb.homilychart.com/gold_htms_prod'
VITE_API_BASE='https://hwjb.homilychart.com/dev/admin/'
# VITE_API_BASE='https://hwjb.homilychart.com/dev/admin/'
# VITE_API_BASE='http://18.143.76.3:10704/' # VITE_API_BASE='http://18.143.76.3:10704/'
VITE_API_BASE='http://192.168.8.246:8081/'
VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload VITE_UPLOAD_URL=https://api.homilychart.com/hljw/api/aws/upload

2
src/views/home.vue

@ -132,7 +132,7 @@ function logout() {
// //
onMounted(async function () { onMounted(async function () {
// //
getAdminData()
//getAdminData()
// //
await getExportList() await getExportList()
}) })

367
src/views/permissions/permission.vue

@ -1,5 +1,5 @@
<script setup> <script setup>
import { ref, onMounted, reactive, computed } from 'vue'
import { ref, onMounted, reactive, computed, watch } from 'vue'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import axios from 'axios' import axios from 'axios'
@ -10,8 +10,6 @@ import request from '@/util/http'
// //
const tableData = ref([]) const tableData = ref([])
// ===========================================
//
const total = ref(100) const total = ref(100)
// admin // admin
const admin = ref({ const admin = ref({
@ -25,15 +23,19 @@ const getObj = ref({
pageSize: 10 pageSize: 10
}) })
// //
const permissionAddVisible = ref(false)
const userAddVisible = ref(false)
// //
const permissionEditVisible = ref(false)
const userEditVisible = ref(false)
// //
const market = ref([]) const market = ref([])
// //
const postiton = ref([]) const postiton = ref([])
//
//
const userAddObj = ref({})
//
const permissionAddObj = ref({}) const permissionAddObj = ref({})
//
const permissionAddVisible = ref(false)
// addMachineIdInput // addMachineIdInput
const addAdmin = ref({ const addAdmin = ref({
account: '', account: '',
@ -45,8 +47,15 @@ const addAdmin = ref({
machineIds: [], // machineIds: [], //
remark: '' remark: ''
}) })
const addMachineIdInput = function () { // >=1
// 01>=1
//
const addRole = ref({
roleName: '',
parentName: '',
permissionSelect: []
})
//
const permissionSelect = ref()
const addMachineIdInput = function () {
if (addAdmin.value.machineIds.length >= 1) { if (addAdmin.value.machineIds.length >= 1) {
ElMessage.warning('设备数量已达上限') ElMessage.warning('设备数量已达上限')
return return
@ -58,16 +67,45 @@ const addMachineIdInput = function () { // 为啥>=1????????
const permissionEditObj = ref({}) const permissionEditObj = ref({})
// //
const delObj = ref({}) const delObj = ref({})
//
const lists = [
{name: '管理员', value: '1', permissions: ['2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20']},
{name: '总部财务', value: '2', permissions: ['2','3','4','5','6','7','8','9']},
{name: '总部客服', value: '3', permissions: ['2','3','4','5','6','7','8']},
{name: '地区负责人', value: '4', permissions: ['2','3','4','5','6']},
{name: '地区财务', value: '5', permissions: ['2','3','4','5']},
{name: '客服专员', value: '6', permissions: ['2','3']}
]
const filteredData = ref([])
watch(() => addRole.value.parentName, (newValue) => {
const selectedRole = lists.find(role => role.value === newValue)
if (selectedRole) {
const allowedPermissions = selectedRole.permissions
filteredData.value = filterPermissions(data, allowedPermissions)
} else {
filteredData.value = data
}
})
const filterPermissions = (permissions, allowedPermissions) => {
return permissions.filter(permission => {
if (allowedPermissions.includes(permission.value)) {
if (permission.children) {
permission.children = filterPermissions(permission.children, allowedPermissions)
}
return true
}
return false
})
}
//
const get = async function (val) { const get = async function (val) {
try { try {
//
if (typeof val === 'number') { if (typeof val === 'number') {
getObj.value.pageNum = val getObj.value.pageNum = val
} }
console.log('搜索参数', getObj.value, admin.value) console.log('搜索参数', getObj.value, admin.value)
// POST
const result = await request({ const result = await request({
url: '/permission/getPermission', url: '/permission/getPermission',
data: { data: {
@ -84,13 +122,11 @@ const get = async function (val) {
console.log('请求失败', error) console.log('请求失败', error)
} }
} }
//
const trimJwCode = () => { const trimJwCode = () => {
if (admin.value.account) { if (admin.value.account) {
admin.value.account = admin.value.account.replace(/\s/g, ''); admin.value.account = admin.value.account.replace(/\s/g, '');
} }
} }
//
const search = function () { const search = function () {
trimJwCode(); trimJwCode();
getObj.value.pageNum = 1 getObj.value.pageNum = 1
@ -99,10 +135,8 @@ const search = function () {
// //
const reset = function () { const reset = function () {
admin.value = {} admin.value = {}
// addAdmin.value = {}//Ref.value.resetFields()reset
} }
//
const getArea = async function () { const getArea = async function () {
try { try {
const result = await request({ const result = await request({
@ -112,7 +146,6 @@ const getArea = async function () {
market.value = result.data market.value = result.data
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
//
} }
} }
// //
@ -125,19 +158,19 @@ const getStore = async function () {
postiton.value = result.data postiton.value = result.data
} catch (error) { } catch (error) {
console.log('请求失败', error) console.log('请求失败', error)
//
} }
} }
// //
const openUserAddVisible = function () {
userAddVisible.value = true
}
//
const openPermissionAddVisible = function () { const openPermissionAddVisible = function () {
permissionAddVisible.value = true permissionAddVisible.value = true
} }
// //
const closePermissionAddVisible = function () {
// reset() ...resetreset
//
const closeUserAddVisible = function () {
addAdmin.value = { addAdmin.value = {
account: '', account: '',
name: '', name: '',
@ -148,12 +181,21 @@ const closePermissionAddVisible = function () {
machineIds: [], machineIds: [],
remark: '' remark: ''
}; };
permissionAddVisible.value = false;
userAddVisible.value = false;
// //
Ref.value.resetFields(); Ref.value.resetFields();
}
const closePermissionAddVisible = function () {
permissionAddVisible.value = false
addRole.value = {}
Ref.value.resetFields();
} }
// //
const userAddInit = function () {
userAddObj.value = {}
openUserAddVisible()
}
//
const permissionAddInit = function () { const permissionAddInit = function () {
permissionAddObj.value = {} permissionAddObj.value = {}
openPermissionAddVisible() openPermissionAddVisible()
@ -193,16 +235,14 @@ const permissionAdd = async function () {
addAdmin.value = {} addAdmin.value = {}
get() get()
closePermissionAddVisible()
closeUserAddVisible()
} catch (error) { } catch (error) {
console.log('新增用户权限失败', error) console.log('新增用户权限失败', error)
//
ElMessage.error('新增用户权限失败') ElMessage.error('新增用户权限失败')
closePermissionAddVisible()
closeUserAddVisible()
} }
} else { } else {
//
ElMessage({ ElMessage({
type: 'error', type: 'error',
message: '请检查输入内容' message: '请检查输入内容'
@ -245,12 +285,12 @@ const permissionList = [
] ]
// //
const openPermissionEditVisible = function () {
permissionEditVisible.value = true
const openUserEditVisible = function () {
userEditVisible.value = true
} }
// //
const closePermissionEditVisible = function () {
permissionEditVisible.value = false
const closeUserEditVisible = function () {
userEditVisible.value = false
} }
// //
const permissionEditInit = function (row) { const permissionEditInit = function (row) {
@ -263,7 +303,7 @@ const permissionEditInit = function (row) {
permissionEditObj.value.permission = row.permission permissionEditObj.value.permission = row.permission
permissionEditObj.value.roleId = row.roleId permissionEditObj.value.roleId = row.roleId
console.log('编辑用户权限', permissionEditObj.value) console.log('编辑用户权限', permissionEditObj.value)
openPermissionEditVisible()
openUserEditVisible()
} }
// //
const permissionEdit = async function () { const permissionEdit = async function () {
@ -272,16 +312,14 @@ const permissionEdit = async function () {
url: '/permission/updateAdminRole', url: '/permission/updateAdminRole',
data: permissionEditObj.value data: permissionEditObj.value
}) })
//
console.log('请求成功3', result) console.log('请求成功3', result)
ElMessage.success('编辑用户权限成功') ElMessage.success('编辑用户权限成功')
get() get()
closePermissionEditVisible()
closeUserEditVisible()
} catch (error) { } catch (error) {
console.log('编辑用户权限失败', error) console.log('编辑用户权限失败', error)
//
ElMessage.error('编辑用户权限失败') ElMessage.error('编辑用户权限失败')
closePermissionEditVisible()
closeUserEditVisible()
} }
} }
const throttledPermissionEdit = _.throttle(permissionEdit, 5000, { const throttledPermissionEdit = _.throttle(permissionEdit, 5000, {
@ -309,7 +347,6 @@ const delConfirm = async function () {
get() get()
} catch (error) { } catch (error) {
console.log('删除权限失败', error) console.log('删除权限失败', error)
//
ElMessage.error('删除权限失败') ElMessage.error('删除权限失败')
} }
} }
@ -328,10 +365,7 @@ const editStatus = async function (row) {
url: '/permission/upadatePermission', url: '/permission/upadatePermission',
data: permissionEditObj.value data: permissionEditObj.value
}) })
//
console.log('请求成功2', result) console.log('请求成功2', result)
ElMessage.success( ElMessage.success(
permissionEditObj.value.adminStatus == 1 ? '启用成功' : '禁用成功' permissionEditObj.value.adminStatus == 1 ? '启用成功' : '禁用成功'
) )
@ -339,7 +373,6 @@ const editStatus = async function (row) {
get() get()
} catch (error) { } catch (error) {
console.log('修改用户权限失败', error) console.log('修改用户权限失败', error)
//
} }
} }
@ -357,9 +390,122 @@ const handleCurrentChange = function (val) {
getObj.value.pageNum = val getObj.value.pageNum = val
get() get()
} }
const data = [
{
value: '2',
label: '工作台'
},
{
value: '3',
label: '财务审核',
children:[
{
value:'11',
label:'充值审核'
},
{
value:'13',
label:'退款审核'
},{
value:'12',//14
label:'审核操作'
}
]
},
{
value: '4',
label: '汇率管理'
},{
value: '5',
label: '充值管理',
children:[
{
value:'17',
label:'新增充值'
},
{
value:'18',
label:'金币充值明细'
}
]
},{
value: '6',
label: '消耗管理',
children:[
{
value:'19',
label:'新增消耗'
},
{
value:'20',
label:'金币消耗明细'
}
]
},{
value: '7',
label: '退款管理',
children:[
{
value:'21',
label:'新增退款'
},
{
value:'22',
label:'金币退款明细'
}
]
},{
value: '8',
label: '客户账户明细',
children:[
{
value:'23',
label:'客户金币明细'
},
{
value:'24',
label:'客户金币余额'
}
]
},{
value: '9',
label: '权限管理'
},{
value: '100',
label: '地区数据',
children:[
{
value:'101',
label:'总部'
},
{
value:'102',
label:'香港'
},
{
value:'103',
label:'新加坡'
},
{
value:'104',
label:'马来西亚'
},
{
value:'105',
label:'越南'
},
{
value:'106',
label:'韩国'
}
]
}
]
</script> </script>
<template> <template>
<!-- 搜索表单 -->
<el-row> <el-row>
<el-col> <el-col>
<el-card style="margin-bottom: 20px"> <el-card style="margin-bottom: 20px">
@ -395,11 +541,12 @@ const handleCurrentChange = function (val) {
<el-card> <el-card>
<!-- 展示表单 --> <!-- 展示表单 -->
<div class="add-item"> <div class="add-item">
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()">新增用户</el-button>
<el-button style="color: #048efb; border: 1px solid #048efb" @click="userAddInit()">新增用户</el-button>
<el-button style="color: #048efb; border: 1px solid #048efb" @click="permissionAddInit()">新增角色</el-button>
</div> </div>
<div> <div>
<el-table :data="tableData" style="width: 100%">
<el-table :data="tableData" style="width: 100%" show-overflow-tooltip>
<el-table-column type="index" label="序号" width="100px" fixed="left"> <el-table-column type="index" label="序号" width="100px" fixed="left">
<template #default="scope"> <template #default="scope">
<span>{{ <span>{{
@ -458,7 +605,7 @@ const handleCurrentChange = function (val) {
</el-col> </el-col>
</el-row> </el-row>
<!-- 新增用户权限 --> <!-- 新增用户权限 -->
<el-dialog v-model="permissionAddVisible" title="新增用户权限" width="800px" :close-on-click-modal="false">
<el-dialog v-model="userAddVisible" title="新增用户权限" width="800px" :close-on-click-modal="false">
<template #footer> <template #footer>
<!-- 居中显示 --> <!-- 居中显示 -->
@ -472,20 +619,17 @@ const handleCurrentChange = function (val) {
</el-form-item> </el-form-item>
<el-form-item prop="market" label="所属地区:" required> <el-form-item prop="market" label="所属地区:" required>
<el-select v-model="addAdmin.market" placeholder="请选择所属地区" style="width: 220px"
@change="() => Ref.value.validateField('market')">
<el-option v-for="item in market" :key="item" :label="item" :value="item" />
<el-select multiple v-model="addAdmin.market" placeholder="请选择所属地区" style="width: 440px">
<el-option v-for="item in market" :key="item" :label="item" :value="item" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="permission" label="权限类别:" required>
<el-select v-model="addAdmin.permission" placeholder="请选择权限" style="width: 220px"
@change="() => Ref.value.validateField('permission')">
<el-option v-for="item in permissionList" :key="item.value" :label="item.label"
:value="item.value"></el-option>
<el-form-item prop="permission" label="角色名称:" required>
<el-select v-model="addAdmin.permission" placeholder="请选择角色名称" style="width: 220px">
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item prop="postiton" label="职位:" required> <el-form-item prop="postiton" label="职位:" required>
<el-input v-model="addAdmin.postiton" placeholder="请输入职" style="width: 220px" />
<el-input v-model="addAdmin.postiton" placeholder="请输入职" style="width: 220px" />
</el-form-item> </el-form-item>
<el-form-item prop="machineId" label="机器码:" required> <el-form-item prop="machineId" label="机器码:" required>
<div style="display: flex; align-items: center; flex-wrap: wrap;"> <div style="display: flex; align-items: center; flex-wrap: wrap;">
@ -505,7 +649,7 @@ const handleCurrentChange = function (val) {
</el-form> </el-form>
<div> <div>
<el-button @click="closePermissionAddVisible()">取消</el-button>
<el-button @click="closeUserAddVisible()">取消</el-button>
<el-button type="primary" @click="throttledPermissionAdd()"> <el-button type="primary" @click="throttledPermissionAdd()">
提交 提交
</el-button> </el-button>
@ -514,85 +658,66 @@ const handleCurrentChange = function (val) {
</el-dialog> </el-dialog>
<!-- 这是编辑用户权限弹窗 --> <!-- 这是编辑用户权限弹窗 -->
<el-dialog v-model="permissionEditVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false">
<el-descriptions class="margin-top" :column="2" border label-width="200px">
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon>
<UserFilled />
</el-icon>
员工精网号
</div>
</template>
{{ permissionEditObj.account }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon>
<User />
</el-icon>
员工姓名
</div>
</template>
{{ permissionEditObj.name }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon>
<location />
</el-icon>
所属地区
</div>
</template>
{{ permissionEditObj.market }}
</el-descriptions-item>
<el-descriptions-item>
<template #label>
<div class="permissionVisible">
<el-icon>
<OfficeBuilding />
</el-icon>
部门
</div>
</template>
{{ permissionEditObj.postiton }}
</el-descriptions-item>
</el-descriptions>
<el-divider>
<el-icon><star-filled /></el-icon>
</el-divider>
<el-dialog v-model="userEditVisible" title="编辑用户权限" width="800px" :close-on-click-modal="false">
<el-form ref="Ref" :model="permissionEditObj" label-width="auto" style="max-width: 600px; align-items: center">
<el-form-item prop="userName" label="用户名称:" required>
<el-input v-model="permissionEditObj.userName" placeholder="请输入用户名" style="width: 220px" />
</el-form-item>
<el-form-item prop="roleName" label="角色名称:" required>
<el-input v-model="permissionEditObj.roleName" placeholder="请输入用户名" style="width: 220px" />
</el-form-item>
<el-form-item prop="parentName" label="上级角色:" required>
<el-select v-model="permissionEditObj.parentName" placeholder="请选择上级角色" style="width: 220px">
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="permissionSelect" label="权限列表:" required>
<el-tree multiple v-model="permissionEditObj.permissionSelect" :data="data" :render-after-expand="false" show-checkbox style="width: 700px" />
</el-form-item>
</el-form>
<div> <div>
<span class="permissionVisible" style="margin-right: 20px">权限设置:</span>
<el-radio-group v-model="permissionEditObj.roleId">
<el-radio value="1" border>管理员</el-radio>
<el-radio value="2" border>总部财务</el-radio>
<el-radio value="3" border>总部客服</el-radio>
<el-radio value="4" border>地区负责人</el-radio>
<el-radio value="5" border>地区财务</el-radio>
<el-radio value="6" border>客服专员</el-radio>
</el-radio-group>
</div> </div>
<template #footer> <template #footer>
<div> <div>
<el-button @click="closePermissionEditVisible()">取消</el-button>
<el-button @click="closeUserEditVisible()">取消</el-button>
<el-button type="primary" @click="throttledPermissionEdit"> <el-button type="primary" @click="throttledPermissionEdit">
提交 提交
</el-button> </el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
<!-- 新增角色 -->
<el-dialog v-model="permissionAddVisible" title="新增角色" width="800px" :close-on-click-modal="false">
<template #footer>
<el-form ref="Ref" :model="addRole" label-width="auto" style="max-width: 600px; align-items: center">
<el-form-item prop="roleName" label="角色名称:" required>
<el-input v-model="addRole.roleName" placeholder="请输入用户名" style="width: 220px" />
</el-form-item>
<el-form-item prop="parentName" label="上级角色:">
<el-select v-model="addRole.parentName" placeholder="请选择上级角色" style="width: 220px" clearable>
<el-option v-for="item in permissionList" :key="item.value" :label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="permissionSelect" label="权限列表:" required>
<el-tree multiple v-model="addRole.permissionSelect" :data="filteredData" :render-after-expand="false" show-checkbox style="width: 700px" />
</el-form-item>
<el-form-item prop="grade" label="优先级:" required>
<el-input v-model="addRole.grade" placeholder="数字1~999" style="width: 220px" />
</el-form-item>
</el-form>
<div>
<el-button @click="closePermissionAddVisible()">取消</el-button>
<el-button type="primary" @click="throttledPermissionAdd()">
提交
</el-button>
</div>
</template>
</el-dialog>
</template> </template>
<style scoped> <style scoped>
.permissionVisible {
font-size: 16px;
font-weight: bold;
}
.pagination { .pagination {
display: flex; display: flex;
} }
@ -625,4 +750,4 @@ const handleCurrentChange = function (val) {
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
} }
</style>
</style>

131
src/views/workspace/index.vue

@ -143,17 +143,8 @@
<el-button @click="getMonth()" label="month">本月</el-button> <el-button @click="getMonth()" label="month">本月</el-button>
<el-button @click="getYear()" label="year">本年</el-button> <el-button @click="getYear()" label="year">本年</el-button>
</div> </div>
<!-- 设置日期选择器的显示和绑定值格式 -->
<el-date-picker
v-model="dateRange"
type="datetimerange"
range-separator="→"
start-placeholder="开始时间"
end-placeholder="结束时间"
style="margin-left:10px"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
<el-date-picker v-model="dateRange" type="datetimerange" range-separator="" start-placeholder="开始时间"
end-placeholder="结束时间" style="margin-left:10px" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
<el-button type="primary" style="margin-left: 5px" @click="getChartData">查询</el-button> <el-button type="primary" style="margin-left: 5px" @click="getChartData">查询</el-button>
</el-row> </el-row>
</el-col> </el-col>
@ -162,6 +153,11 @@
<el-row :gutter="20" style="margin-top: 20px"> <el-row :gutter="20" style="margin-top: 20px">
<el-col :span="18"> <el-col :span="18">
<div class="bar"> <div class="bar">
<div v-if="chartLoading" class="loading-overlay">
<div class="loading-spinner"></div>
</div>
<div ref="chartRef" style="width: 100%; height: 400px"></div> <div ref="chartRef" style="width: 100%; height: 400px"></div>
</div> </div>
</el-col> </el-col>
@ -193,7 +189,7 @@
<script setup> <script setup>
import * as echarts from 'echarts' import * as echarts from 'echarts'
import { ref, onMounted, nextTick, watch } from 'vue'
import { ref, onMounted, nextTick, watch, onUnmounted } from 'vue'
import API from '@/util/http' import API from '@/util/http'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import dayjs from 'dayjs'; import dayjs from 'dayjs';
@ -242,6 +238,38 @@ const sumDaily = ref(0)
const rechargeNum = ref(0) const rechargeNum = ref(0)
const firstRecharge = ref(0) const firstRecharge = ref(0)
const length = ref(0) const length = ref(0)
//
const chartLoading = ref(true)
const handleResize = () => {
if (chartInstance.value) {
try {
chartInstance.value.resize()
console.log('resize一下')
} catch (error) {
console.error('图表resize失败:', error)
}
}
}
//
const initChart = () => {
if (!chartInstance && chartRef.value) {
chartInstance = echarts.init(chartRef.value)
window.addEventListener('resize', handleResize)
}
}
//
const destroyChart = () => {
if (chartInstance.value) {
try {
chartInstance.value.dispose()
} catch (error) {
console.error('图表销毁失败:', error)
}
chartInstance.value = null
}
window.removeEventListener('resize', handleResize)
}
const formatDate = function(date) { const formatDate = function(date) {
const year = date.getFullYear(); const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0');
@ -339,31 +367,31 @@ const processData = (data) => {
const yesterdayRefund = summary.refundPermanent + summary.refundFreeJune + summary.refundFreeDecember + summary.refundTask const yesterdayRefund = summary.refundPermanent + summary.refundFreeJune + summary.refundFreeDecember + summary.refundTask
// //
currentGold.value = summary.currentGold
dailyChange.value = summary.dailyChange
currentPermanent.value = summary.currentPermanent
currentFree.value = summary.currentFree
currentFreeJune.value = summary.currentFreeJune
currentFreeDecember.value = summary.currentFreeDecember
currentTask.value = summary.currentTask
yearlyRecharge.value = summary.yearlyRecharge
yearlyMoney.value = summary.yearlyMoney
recharge.value = summary.recharge
money.value = summary.money
yearlyReduce.value = summary.yearlyReduce
yearlyConsume.value = summary.yearlyConsume
yearlyRefund.value = summary.yearlyRefund
dailyReduce.value = summary.dailyReduce
dailyConsume.value = yesterdayConsume
dailyRefund.value = yesterdayRefund
currentGold.value = summary.currentGold.toFixed(2)
dailyChange.value = summary.dailyChange.toFixed(2)
currentPermanent.value = summary.currentPermanent.toFixed(2)
currentFree.value = summary.currentFree.toFixed(2)
currentFreeJune.value = summary.currentFreeJune.toFixed(2)
currentFreeDecember.value = summary.currentFreeDecember.toFixed(2)
currentTask.value = summary.currentTask.toFixed(2)
yearlyRecharge.value = summary.yearlyRecharge.toFixed(2)
yearlyMoney.value = summary.yearlyMoney.toFixed(2)
recharge.value = summary.recharge.toFixed(2)
money.value = summary.money.toFixed(2)
yearlyReduce.value = summary.yearlyReduce.toFixed(2)
yearlyConsume.value = summary.yearlyConsume.toFixed(2)
yearlyRefund.value = summary.yearlyRefund.toFixed(2)
dailyReduce.value = summary.dailyReduce.toFixed(2)
dailyConsume.value = yesterdayConsume.toFixed(2)
dailyRefund.value = yesterdayRefund.toFixed(2)
yearlyRechargeNum.value = summary.yearlyRechargeNum yearlyRechargeNum.value = summary.yearlyRechargeNum
sumWow.value = summary.sumWow / length.value
sumDaily.value = summary.sumDaily / length.value
rechargeNum.value = summary.rechargeNum
firstRecharge.value = summary.firstRecharge
sumWow.value = (summary.sumWow / length.value).toFixed(2)
sumDaily.value = (summary.sumDaily / length.value).toFixed(2)
rechargeNum.value = summary.rechargeNum.toFixed(2)
firstRecharge.value = summary.firstRecharge.toFixed(2)
} }
// //
@ -424,7 +452,6 @@ const getChartData = async () => {
} }
// //
const processChartData = (marketCards) => { const processChartData = (marketCards) => {
//
const chartData = { const chartData = {
rechargePermanent: [], rechargePermanent: [],
rechargeFree: [], rechargeFree: [],
@ -441,7 +468,6 @@ const processChartData = (marketCards) => {
const sumConsumeFree1 = ref(0) const sumConsumeFree1 = ref(0)
const sumConsumeTask1 = ref(0) const sumConsumeTask1 = ref(0)
//
marketCards.forEach(market => { marketCards.forEach(market => {
chartData.rechargePermanent.push(market.sumRechargePermanent / 100 || 0) chartData.rechargePermanent.push(market.sumRechargePermanent / 100 || 0)
chartData.rechargeFree.push(market.sumRechargeFree / 100 || 0) chartData.rechargeFree.push(market.sumRechargeFree / 100 || 0)
@ -465,12 +491,11 @@ const processChartData = (marketCards) => {
sumConsumeFree.value = sumConsumeFree1.value sumConsumeFree.value = sumConsumeFree1.value
sumConsumeTask.value = sumConsumeTask1.value sumConsumeTask.value = sumConsumeTask1.value
//
updateChart(chartData) updateChart(chartData)
} }
const processRankingData = (marketCards) => { const processRankingData = (marketCards) => {
//
//
const rankingData = marketCards.map(market => { const rankingData = marketCards.map(market => {
let coinAmount = 0; let coinAmount = 0;
if (activeTab.value === 'recharge') { if (activeTab.value === 'recharge') {
@ -507,7 +532,7 @@ const processRankingData = (marketCards) => {
} }
} }
return { return {
market: market.market, // 使 market
market: market.market,
coinAmount: coinAmount coinAmount: coinAmount
}; };
}); });
@ -515,23 +540,23 @@ const processRankingData = (marketCards) => {
// //
rankingData.sort((a, b) => b.coinAmount - a.coinAmount); rankingData.sort((a, b) => b.coinAmount - a.coinAmount);
//
//
tableData.value = rankingData.map((item, index) => ({ tableData.value = rankingData.map((item, index) => ({
rank: index + 1, rank: index + 1,
...item ...item
})); }));
} }
// selectedType
watch(selectedType, () => { watch(selectedType, () => {
getChartData(); getChartData();
}); });
// //
const updateChart = (chartData) => { const updateChart = (chartData) => {
if (!chartInstance) { if (!chartInstance) {
chartInstance = echarts.init(chartRef.value)
initChart()
} }
chartLoading.value = true
try{
let series = [] let series = []
let legend = [] let legend = []
@ -593,7 +618,6 @@ const updateChart = (chartData) => {
legend = ['永久金币', '免费金币', '任务金币'] legend = ['永久金币', '免费金币', '任务金币']
} }
//
const option = { const option = {
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',
@ -638,6 +662,14 @@ const updateChart = (chartData) => {
} }
chartInstance.setOption(option) chartInstance.setOption(option)
} catch (error) {
console.error('图表更新失败:', error)
ElMessage.error('图表渲染失败')
} finally {
setTimeout(() => {
chartLoading.value = false
}, 300)
}
} }
// //
@ -673,13 +705,16 @@ const getCardData = async () => {
onMounted(async () => { onMounted(async () => {
await getAdminData() await getAdminData()
await getCardData() await getCardData()
await getMarkets() await getMarkets()
getYear() getYear()
await getChartData()
console.log('挂载后调用')
window.addEventListener('resize', () => {
chartInstance.resize()
})
})
onUnmounted(() => {
destroyChart()
}) })
</script> </script>

Loading…
Cancel
Save