Commit b3abe08e authored by louyuqi's avatar louyuqi

update

parent c12725d3
...@@ -18,6 +18,10 @@ instance.interceptors.request.use((config)=>{ ...@@ -18,6 +18,10 @@ instance.interceptors.request.use((config)=>{
return config return config
} }
}) })
instance.interceptors.response.use((response)=>{
// console.log('ee',response)
return response.data
})
const store = getStore<USR<any>>('mining-manager') const store = getStore<USR<any>>('mining-manager')
export const doLogin = async (data:LoginData) => { export const doLogin = async (data:LoginData) => {
...@@ -36,13 +40,13 @@ export const doLogin = async (data:LoginData) => { ...@@ -36,13 +40,13 @@ export const doLogin = async (data:LoginData) => {
export const getPlatList = async()=>{ export const getPlatList = async()=>{
return instance.get('/api/admin/plat-list',).then(res=> res.data) return instance.get('/api/admin/plat-list',)
} }
export const getNodeList = async(params:{id:string})=>{ export const getNodeList = async(params:{id:string})=>{
return instance.get('/api/admin/node-list',{params}).then(res=> res.data) return instance.get('/api/admin/node-list',{params})
} }
export const getPoolList = async(params:{id:string})=>{ export const getPoolList = async(params:{id:string})=>{
return instance.get('/api/admin/pool-list',{params}).then(res=> res.data) return instance.get('/api/admin/pool-list',{params})
} }
export interface GetTransListParams{ export interface GetTransListParams{
...@@ -87,3 +91,4 @@ export const downloadTxt = async(params:GetTransListParams)=>{ ...@@ -87,3 +91,4 @@ export const downloadTxt = async(params:GetTransListParams)=>{
}) })
} }
export default instance
\ No newline at end of file
import Http from './index';
export interface INewUsersParams{
platId?:string,
nodeId?:string,
poolId?:string,
minerId?:string,
addr?:string,
type?:string,
page:string|number,
pageSize:string|number,
date?:string,
}
export function getNewUsersList(params:INewUsersParams){
return Http.get('/api/admin/new-users',{params})
}
\ No newline at end of file
import Http from './index';
export interface IAddRuleParams{
ty:number,
addr:string
}
export interface IWithdrawListParams{
ty:number,
page:string|number,
pageSize:string|number
}
export interface IDeleteRuleParams{
id:string
}
export function addWithdraw(params:IAddRuleParams){
return Http.post('/api/admin/add-withdraw',params)
}
export function delWithdraw(params:IDeleteRuleParams){
return Http.post('/api/admin/del-withdraw',params)
}
export function getWithdrawList(params:IWithdrawListParams){
return Http.get('/api/admin/withdraw-list',{params})
}
\ No newline at end of file
...@@ -54,6 +54,13 @@ export const routes:RouteRecordRaw[]=[ ...@@ -54,6 +54,13 @@ export const routes:RouteRecordRaw[]=[
return import('../views/data/newUser.vue') return import('../views/data/newUser.vue')
} }
}, },
{
path: 'rule-set',
name:'规则设置',
component: () => {
return import('../views/data/ruleSet.vue')
}
},
] ]
} }
......
import { createApp } from 'vue' import { createApp } from 'vue'
import App from './App.vue' import App from './App.vue'
import ElementPlus from 'element-plus' import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import router from './router/index'; import router from './router/index';
import './style.css' import './style.css'
import './assets/css/common.less' import './assets/css/common.less'
import 'element-plus/dist/index.css'
createApp(App).use(ElementPlus).use(router).mount('#app') createApp(App).use(ElementPlus).use(router).mount('#app')
...@@ -27,6 +27,7 @@ const login = async () => { ...@@ -27,6 +27,7 @@ const login = async () => {
message: "用户登陆成功", message: "用户登陆成功",
type: "success" type: "success"
}) })
console.log('?')
router.push('/user') router.push('/user')
} else { } else {
ElMessage({ ElMessage({
......
<template> <template>
<div class="m-container relative py-6 bg-white"> <div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-28 "> <div class="right relative flex-grow px-3 pb-5 ">
<Tabs @fresh="initTable"></Tabs> <Tabs @fresh="getData"></Tabs>
<el-cascader :show-all-levels="false" :props="cascaderProps" /> <div class="control-bar">
<el-cascader class="control-bar-item" clearable placeholder="选择票池" :show-all-levels="false" v-model="params.ids" :props="cascaderProps" />
<el-date-picker
v-model="params.date"
class="control-bar-item"
type="date"
placeholder="选择时间"
></el-date-picker>
<el-input v-model="params.addr" placeholder="地址" class="control-bar-item"></el-input>
<el-button class="control-bar-item" @click="getData" type="primary">查询</el-button>
</div>
</div>
<div class="table-view w-full ">
<div class=" text-sm opacity-50 py-3 px-3">新用户:{{ data.newUserCount }}</div>
<el-table
element-loading-text="加载中,请等待..."
:data="data.tableData"
class=" container">
<el-table-column v-for="i in config.columnSet" :prop="i.prop" :label="i.label">
</el-table-column>
</el-table>
</div>
<div class="text-center mt-5">
<el-pagination
:page-size="params.pageSize"
@current-change="getData"
v-model:current-page="params.page"
background
layout="prev, pager, next"
:total="data.newUserCount"></el-pagination>
</div> </div>
</div> </div>
</template> </template>
...@@ -10,9 +41,50 @@ ...@@ -10,9 +41,50 @@
<script lang="ts" setup> <script lang="ts" setup>
import Tabs from '../../components/tabs.vue'; import Tabs from '../../components/tabs.vue';
import {getNodeList, getPlatList, getPoolList} from "../../api"; import {getNodeList, getPlatList, getPoolList} from "../../api";
const initTable=()=>{ import {onMounted, reactive} from "vue";
import {getNewUsersList, INewUsersParams} from "../../api/newUsersSearvice";
import dayjs from "dayjs";
onMounted(()=>{
getData();
})
const params=reactive({
ids:[],
addr:undefined,
page:1,
pageSize:20,
date:undefined,
})
const config=reactive({
columnSet:[
{
prop:'addr',
label:'用户地址'
},
{
prop:'ticket',
label:'委托票数'
},
{
prop:'dexBalance',
label:'交易所所得'
},
{
prop:'otherBalance',
label:'其他所得'
},
{
prop:'airBalance',
label:'空投所得'
},
] as {prop:string,label:string}[],
})
const data=reactive({
tableData:[
} ],
newUserCount:0,
})
const getList=(level:number,id?:string)=>{ const getList=(level:number,id?:string)=>{
console.log(level) console.log(level)
const searchArray=[getNodeList,getPoolList] const searchArray=[getNodeList,getPoolList]
...@@ -21,7 +93,22 @@ const getList=(level:number,id?:string)=>{ ...@@ -21,7 +93,22 @@ const getList=(level:number,id?:string)=>{
} }
return getPlatList() return getPlatList()
} }
let id=0 const getData = () => {
const param:INewUsersParams={
platId:params.ids[0],
nodeId:params.ids[1],
poolId:params.ids[2],
addr:params.addr,
date:params.date?dayjs(params.date).unix().toString():undefined,
page:params.page,
pageSize:params.pageSize
}
getNewUsersList(param).then(res=>{
data.tableData=res.data.list;
data.newUserCount=+res.data.data.count
// console.log('res',res)
})
}
const cascaderProps={ const cascaderProps={
lazy: true, lazy: true,
lazyLoad(node:any, resolve:any) { lazyLoad(node:any, resolve:any) {
...@@ -51,6 +138,13 @@ const cascaderProps={ ...@@ -51,6 +138,13 @@ const cascaderProps={
} }
</script> </script>
<style scoped> <style lang="less" scoped>
.control-bar{
display: flex;
align-items: center;
/deep/ .control-bar-item+.control-bar-item{
margin-left: 10px;
}
}
</style> </style>
\ No newline at end of file
<template>
<div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-5 ">
<Tabs @fresh="getData"></Tabs>
<div class="control-bar">
<el-select v-model="type" @change="getData" class="m-2" placeholder="Select">
<el-option
v-for="item in config.options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-button class="control-bar-item" @click="addRule" type="primary">添加</el-button>
</div>
</div>
<div class="table-view w-full ">
<el-table
element-loading-text="加载中,请等待..."
:data="data.tableData"
class=" container">
<el-table-column v-for="i in config.columnSet" :prop="i.prop" :label="i.label">
</el-table-column>
<el-table-column label="管理">
</el-table-column>
</el-table>
</div>
<div class="text-center mt-5">
<el-pagination
:page-size="params.pageSize"
@current-change="getData"
v-model:current-page="params.page"
background
layout="prev, pager, next"
:total="params.count"></el-pagination>
</div>
</div>
</template>
<script lang="ts" setup>
import Tabs from '../../components/tabs.vue';
import {onMounted, reactive, ref} from "vue";
import dayjs from "dayjs";
import {ElMessage, ElMessageBox} from "element-plus";
import {addWithdraw, delWithdraw, getWithdrawList} from "../../api/ruleSetSearvice";
onMounted(()=>{
getData();
})
const type=ref<number>(1)
const params=reactive({
page:1,
pageSize:20,
})
const config=reactive({
columnSet:[
{
prop:'addr',
label:'检测地址'
},
{
prop:'createAtString',
label:'添加时间'
},
] as {prop:string,label:string}[],
options:[{
value:1,
label:'交易所地址'
},{
value:2,
label:'空投地址'
}]as {value:number,label:string}[]
})
const data=reactive({
tableData:[
],
count:0
})
const getData=()=>{
getWithdrawList({page:params.page,pageSize:params.pageSize,ty:type.value}).then(res=>{
console.log(res.data)
data.tableData=res.data.list;
data.count=+res.data.count
})
}
const deleteData=(id:string)=>{
delWithdraw({id}).then(res=>{
ElMessage.success('删除成功')
getData();
})
}
const addRule=()=>{
ElMessageBox.prompt('请输入地址', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
closeOnClickModal:false,
})
.then(({ value }) => {
addWithdraw({ty:type.value,addr:value}).then(res=>{
ElMessage.success('添加成功')
params.page=1
getData()
}).catch((res)=>{
ElMessage.error(res.response.data.message)
// console.log('e',res.response)
})
})
.catch(() => {
})
}
</script>
<style lang="less" scoped>
.control-bar{
display: flex;
align-items: center;
/deep/ .control-bar-item+.control-bar-item{
margin-left: 10px;
}
}
</style>
\ No newline at end of file
<script lang="ts" setup> <script lang="ts" setup>
import Tabs from '../../components/tabs.vue'; import Tabs from '../../components/tabs.vue';
import Controllbar from '../../components/controllbar.vue'; import Controllbar from '../../components/controllbar.vue';
import { useAxios } from '@vueuse/integrations/useAxios' import {useAxios} from '@vueuse/integrations/useAxios'
import { computed, onMounted, reactive, ref, watch } from 'vue'; import {computed, onMounted, reactive, ref, watch} from 'vue';
import { downloadTxt, getTransList } from '../../api'; import {downloadTxt, getTransList} from '../../api';
import { ElMessage } from 'element-plus' import {ElMessage} from 'element-plus'
import dayjs from 'dayjs' import dayjs from 'dayjs'
const reqData = reactive({ const reqData = reactive({
platId:0, platId: 0,
status:0, status: 0,
start:0, start: 0,
end:0, end: 0,
page:1, page: 1,
pageSize:10, pageSize: 10,
addr:'' addr: ''
}) })
const loading = ref(false) const loading = ref(false)
...@@ -21,53 +22,53 @@ const disableDownload = ref(true) ...@@ -21,53 +22,53 @@ const disableDownload = ref(true)
const table = ref([]) const table = ref([])
const downloadModal = ref(false) const downloadModal = ref(false)
const pageController = reactive({ const pageController = reactive({
size:0 size: 0
}) })
watch(reqData,async (newV)=>{ watch(reqData, async (newV) => {
await initTable() await initTable()
}) })
watch(reqData,(newV)=>{ watch(reqData, (newV) => {
if(newV.platId && newV.end && newV.start){ if (newV.platId && newV.end && newV.start) {
disableDownload.value = false disableDownload.value = false
}else{ } else {
disableDownload.value =true disableDownload.value = true
} }
}) })
const columnSet = [ const columnSet = [
{ {
prop:'addr', prop: 'addr',
label:'用户地址', label: '用户地址',
}, },
{ {
prop:'amount', prop: 'amount',
label:'空投金额' label: '空投金额'
}, },
{ {
prop:'startTime', prop: 'startTime',
label:'导出时间' label: '导出时间'
}, },
{ {
prop:'blockTime', prop: 'blockTime',
label:'完成时间' label: '完成时间'
}, },
{ {
prop:'jobTime', prop: 'jobTime',
label:'登记时间' label: '登记时间'
}, },
{ {
prop:'status', prop: 'status',
label:"状态" label: "状态"
}, },
] ]
const initTable = async ()=>{ const initTable = async () => {
loading.value= true loading.value = true
const res = await getTransList(reqData) const res = await getTransList(reqData)
pageController.size = parseInt(res.data.count); pageController.size = parseInt(res.data.count);
table.value = res.data.tx table.value = res.data.tx
loading.value = false loading.value = false
} }
const childDataChange = (v:{data:any,type:string})=>{ const childDataChange = (v: { data: any, type: string }) => {
switch (v.type) { switch (v.type) {
case 'addr': case 'addr':
reqData.addr = v.data reqData.addr = v.data
...@@ -85,35 +86,35 @@ const childDataChange = (v:{data:any,type:string})=>{ ...@@ -85,35 +86,35 @@ const childDataChange = (v:{data:any,type:string})=>{
} }
console.log(reqData); console.log(reqData);
} }
const download = async()=> { const download = async () => {
const res = await downloadTxt(reqData) as any const res = await downloadTxt(reqData) as any
if(res.status === 'error'){ if (res.status === 'error') {
downloadModal.value = false; downloadModal.value = false;
ElMessage({ ElMessage({
message:'下载失败,可能因为文件没有内容或者已经被导出', message: '下载失败,可能因为文件没有内容或者已经被导出',
type:'error' type: 'error'
}) })
}else if(res.status === 'success'){ } else if (res.status === 'success') {
downloadModal.value = false; downloadModal.value = false;
ElMessage({ ElMessage({
message:'下载已完成', message: '下载已完成',
type:'success' type: 'success'
}) })
} }
} }
const dateFilter = computed(()=>{ const dateFilter = computed(() => {
return function(v:any){ return function (v: any) {
const time = parseInt(v)*1000 const time = parseInt(v) * 1000
const formatDate = dayjs(time).format('YYYY-MM-DD') const formatDate = dayjs(time).format('YYYY-MM-DD')
if(formatDate){ if (formatDate) {
return formatDate return formatDate
}else{ } else {
return '无' return '无'
} }
} }
}) })
const statusFilter = computed((v)=>{ const statusFilter = computed((v) => {
return function(v:any){ return function (v: any) {
switch (v) { switch (v) {
case 1: case 1:
return '未发送' return '未发送'
...@@ -128,10 +129,10 @@ const statusFilter = computed((v)=>{ ...@@ -128,10 +129,10 @@ const statusFilter = computed((v)=>{
} }
}) })
const requestDataChanged = (v:any)=> reqData.page = v const requestDataChanged = (v: any) => reqData.page = v
onMounted(async ()=>{ onMounted(async () => {
await initTable() await initTable()
}) })
</script> </script>
<template> <template>
<el-dialog <el-dialog
...@@ -152,9 +153,10 @@ const requestDataChanged = (v:any)=> reqData.page = v ...@@ -152,9 +153,10 @@ const requestDataChanged = (v:any)=> reqData.page = v
<div class="m-container relative py-6 bg-white"> <div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-28 "> <div class="right relative flex-grow px-3 pb-28 ">
<Tabs @fresh="initTable"></Tabs> <Tabs @fresh="initTable"></Tabs>
<Controllbar @eventEmitted="childDataChange" @dodownload="downloadModal=true" :btnEnable="disableDownload"></Controllbar> <Controllbar @eventEmitted="childDataChange" @dodownload="downloadModal=true"
:btnEnable="disableDownload"></Controllbar>
<div class="table-view w-full "> <div class="table-view w-full ">
<div class=" text-sm opacity-50 py-3 px-3">当前交易笔数:{{pageController.size}}</div> <div class=" text-sm opacity-50 py-3 px-3">当前交易笔数:{{ pageController.size }}</div>
<el-table <el-table
v-loading="loading" v-loading="loading"
element-loading-text="加载中,请等待..." element-loading-text="加载中,请等待..."
...@@ -162,16 +164,16 @@ const requestDataChanged = (v:any)=> reqData.page = v ...@@ -162,16 +164,16 @@ const requestDataChanged = (v:any)=> reqData.page = v
class=" container"> class=" container">
<el-table-column v-for="i in columnSet" :prop="i.prop" :label="i.label"> <el-table-column v-for="i in columnSet" :prop="i.prop" :label="i.label">
<template #default="scope" v-if="i.prop === 'status'"> <template #default="scope" v-if="i.prop === 'status'">
{{statusFilter(scope.row.status)}} {{ statusFilter(scope.row.status) }}
</template> </template>
<template #default="scope" v-if="i.prop === 'startTime'"> <template #default="scope" v-if="i.prop === 'startTime'">
{{dateFilter(scope.row.startTime)}} {{ dateFilter(scope.row.startTime) }}
</template> </template>
<template #default="scope" v-if="i.prop === 'blockTime'"> <template #default="scope" v-if="i.prop === 'blockTime'">
{{dateFilter(scope.row.blockTime)}} {{ dateFilter(scope.row.blockTime) }}
</template> </template>
<template #default="scope" v-if="i.prop === 'jobime'"> <template #default="scope" v-if="i.prop === 'jobime'">
{{dateFilter(scope.row.jboTime)}} {{ dateFilter(scope.row.jboTime) }}
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -189,8 +191,8 @@ const requestDataChanged = (v:any)=> reqData.page = v ...@@ -189,8 +191,8 @@ const requestDataChanged = (v:any)=> reqData.page = v
</template> </template>
<style lang="less" scoped> <style lang="less" scoped>
.el-table__header{ .el-table__header {
width:100%; width: 100%;
} }
</style> </style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment