Commit b3abe08e authored by louyuqi's avatar louyuqi

update

parent c12725d3
......@@ -18,6 +18,10 @@ instance.interceptors.request.use((config)=>{
return config
}
})
instance.interceptors.response.use((response)=>{
// console.log('ee',response)
return response.data
})
const store = getStore<USR<any>>('mining-manager')
export const doLogin = async (data:LoginData) => {
......@@ -36,13 +40,13 @@ export const doLogin = async (data:LoginData) => {
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})=>{
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})=>{
return instance.get('/api/admin/pool-list',{params}).then(res=> res.data)
return instance.get('/api/admin/pool-list',{params})
}
export interface GetTransListParams{
......@@ -86,4 +90,5 @@ export const downloadTxt = async(params:GetTransListParams)=>{
}
})
}
\ No newline at end of file
}
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[]=[
return import('../views/data/newUser.vue')
}
},
{
path: 'rule-set',
name:'规则设置',
component: () => {
return import('../views/data/ruleSet.vue')
}
},
]
}
......
import { createApp } from 'vue'
import App from './App.vue'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import router from './router/index';
import './style.css'
import './assets/css/common.less'
import 'element-plus/dist/index.css'
createApp(App).use(ElementPlus).use(router).mount('#app')
......@@ -27,6 +27,7 @@ const login = async () => {
message: "用户登陆成功",
type: "success"
})
console.log('?')
router.push('/user')
} else {
ElMessage({
......
<template>
<div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-28 ">
<Tabs @fresh="initTable"></Tabs>
<el-cascader :show-all-levels="false" :props="cascaderProps" />
<div class="right relative flex-grow px-3 pb-5 ">
<Tabs @fresh="getData"></Tabs>
<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>
</template>
......@@ -10,9 +41,50 @@
<script lang="ts" setup>
import Tabs from '../../components/tabs.vue';
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)=>{
console.log(level)
const searchArray=[getNodeList,getPoolList]
......@@ -21,7 +93,22 @@ const getList=(level:number,id?:string)=>{
}
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={
lazy: true,
lazyLoad(node:any, resolve:any) {
......@@ -51,6 +138,13 @@ const cascaderProps={
}
</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>
\ 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>
import Tabs from '../../components/tabs.vue';
import Controllbar from '../../components/controllbar.vue';
import { useAxios } from '@vueuse/integrations/useAxios'
import { computed, onMounted, reactive, ref, watch } from 'vue';
import { downloadTxt, getTransList } from '../../api';
import { ElMessage } from 'element-plus'
import {useAxios} from '@vueuse/integrations/useAxios'
import {computed, onMounted, reactive, ref, watch} from 'vue';
import {downloadTxt, getTransList} from '../../api';
import {ElMessage} from 'element-plus'
import dayjs from 'dayjs'
const reqData = reactive({
platId:0,
status:0,
start:0,
end:0,
page:1,
pageSize:10,
addr:''
platId: 0,
status: 0,
start: 0,
end: 0,
page: 1,
pageSize: 10,
addr: ''
})
const loading = ref(false)
......@@ -21,103 +22,103 @@ const disableDownload = ref(true)
const table = ref([])
const downloadModal = ref(false)
const pageController = reactive({
size:0
size: 0
})
watch(reqData,async (newV)=>{
await initTable()
watch(reqData, async (newV) => {
await initTable()
})
watch(reqData,(newV)=>{
if(newV.platId && newV.end && newV.start){
watch(reqData, (newV) => {
if (newV.platId && newV.end && newV.start) {
disableDownload.value = false
}else{
disableDownload.value =true
} else {
disableDownload.value = true
}
})
})
const columnSet = [
{
prop:'addr',
label:'用户地址',
},
{
prop:'amount',
label:'空投金额'
},
{
prop:'startTime',
label:'导出时间'
},
{
prop:'blockTime',
label:'完成时间'
},
{
prop:'jobTime',
label:'登记时间'
},
{
prop:'status',
label:"状态"
},
{
prop: 'addr',
label: '用户地址',
},
{
prop: 'amount',
label: '空投金额'
},
{
prop: 'startTime',
label: '导出时间'
},
{
prop: 'blockTime',
label: '完成时间'
},
{
prop: 'jobTime',
label: '登记时间'
},
{
prop: 'status',
label: "状态"
},
]
const initTable = async ()=>{
loading.value= true
const initTable = async () => {
loading.value = true
const res = await getTransList(reqData)
pageController.size = parseInt(res.data.count);
table.value = res.data.tx
loading.value = false
}
const childDataChange = (v:{data:any,type:string})=>{
switch (v.type) {
case 'addr':
reqData.addr = v.data
break;
case 'status':
reqData.status = v.data
break;
case 'date':
reqData.start = dayjs(v.data[0]).unix()
reqData.end = dayjs(v.data[1]).unix()
break;
case 'platId':
reqData.platId = parseInt(v.data)
break;
}
console.log(reqData);
const childDataChange = (v: { data: any, type: string }) => {
switch (v.type) {
case 'addr':
reqData.addr = v.data
break;
case 'status':
reqData.status = v.data
break;
case 'date':
reqData.start = dayjs(v.data[0]).unix()
reqData.end = dayjs(v.data[1]).unix()
break;
case 'platId':
reqData.platId = parseInt(v.data)
break;
}
console.log(reqData);
}
const download = async()=> {
const res = await downloadTxt(reqData) as any
if(res.status === 'error'){
downloadModal.value = false;
ElMessage({
message:'下载失败,可能因为文件没有内容或者已经被导出',
type:'error'
})
}else if(res.status === 'success'){
downloadModal.value = false;
ElMessage({
message:'下载已完成',
type:'success'
})
}
const download = async () => {
const res = await downloadTxt(reqData) as any
if (res.status === 'error') {
downloadModal.value = false;
ElMessage({
message: '下载失败,可能因为文件没有内容或者已经被导出',
type: 'error'
})
} else if (res.status === 'success') {
downloadModal.value = false;
ElMessage({
message: '下载已完成',
type: 'success'
})
}
}
const dateFilter = computed(()=>{
return function(v:any){
const time = parseInt(v)*1000
const formatDate = dayjs(time).format('YYYY-MM-DD')
if(formatDate){
return formatDate
}else{
return '无'
}
const dateFilter = computed(() => {
return function (v: any) {
const time = parseInt(v) * 1000
const formatDate = dayjs(time).format('YYYY-MM-DD')
if (formatDate) {
return formatDate
} else {
return '无'
}
}
})
const statusFilter = computed((v)=>{
return function(v:any){
switch (v) {
const statusFilter = computed((v) => {
return function (v: any) {
switch (v) {
case 1:
return '未发送'
case 2:
case 2:
return '已导出'
case 3:
return '失败'
......@@ -126,71 +127,72 @@ const statusFilter = computed((v)=>{
}
}
})
})
const requestDataChanged = (v:any)=> reqData.page = v
onMounted(async ()=>{
await initTable()
})
const requestDataChanged = (v: any) => reqData.page = v
onMounted(async () => {
await initTable()
})
</script>
<template>
<el-dialog
v-model="downloadModal"
title="下载Txt记录"
width="30%"
>
<span>确认下载Txt记录</span>
<template #footer>
<el-dialog
v-model="downloadModal"
title="下载Txt记录"
width="30%"
>
<span>确认下载Txt记录</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="downloadModal = false">Cancel</el-button>
<el-button class=" bg-blue-500" type="primary" @click="download"
>Confirm</el-button
>Confirm</el-button
>
</span>
</template>
</el-dialog>
<div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-28 ">
<Tabs @fresh="initTable"></Tabs>
<Controllbar @eventEmitted="childDataChange" @dodownload="downloadModal=true" :btnEnable="disableDownload"></Controllbar>
<div class="table-view w-full ">
<div class=" text-sm opacity-50 py-3 px-3">当前交易笔数:{{pageController.size}}</div>
<el-table
v-loading="loading"
element-loading-text="加载中,请等待..."
:data="table"
class=" container">
<el-table-column v-for="i in columnSet" :prop="i.prop" :label="i.label">
<template #default="scope" v-if="i.prop === 'status'">
{{statusFilter(scope.row.status)}}
</template>
<template #default="scope" v-if="i.prop === 'startTime'">
{{dateFilter(scope.row.startTime)}}
</template>
<template #default="scope" v-if="i.prop === 'blockTime'">
{{dateFilter(scope.row.blockTime)}}
</template>
<template #default="scope" v-if="i.prop === 'jobime'">
{{dateFilter(scope.row.jboTime)}}
</template>
</el-table-column>
</el-table>
</div>
<div class=" w-full mx-auto absolute left-0 bottom-0">
<el-pagination
:page-size="reqData.pageSize"
@current-change="requestDataChanged"
class=" w-96 mx-auto"
background
layout="prev, pager, next" :total="pageController.size"></el-pagination>
</div>
</div>
</template>
</el-dialog>
<div class="m-container relative py-6 bg-white">
<div class="right relative flex-grow px-3 pb-28 ">
<Tabs @fresh="initTable"></Tabs>
<Controllbar @eventEmitted="childDataChange" @dodownload="downloadModal=true"
:btnEnable="disableDownload"></Controllbar>
<div class="table-view w-full ">
<div class=" text-sm opacity-50 py-3 px-3">当前交易笔数:{{ pageController.size }}</div>
<el-table
v-loading="loading"
element-loading-text="加载中,请等待..."
:data="table"
class=" container">
<el-table-column v-for="i in columnSet" :prop="i.prop" :label="i.label">
<template #default="scope" v-if="i.prop === 'status'">
{{ statusFilter(scope.row.status) }}
</template>
<template #default="scope" v-if="i.prop === 'startTime'">
{{ dateFilter(scope.row.startTime) }}
</template>
<template #default="scope" v-if="i.prop === 'blockTime'">
{{ dateFilter(scope.row.blockTime) }}
</template>
<template #default="scope" v-if="i.prop === 'jobime'">
{{ dateFilter(scope.row.jboTime) }}
</template>
</el-table-column>
</el-table>
</div>
<div class=" w-full mx-auto absolute left-0 bottom-0">
<el-pagination
:page-size="reqData.pageSize"
@current-change="requestDataChanged"
class=" w-96 mx-auto"
background
layout="prev, pager, next" :total="pageController.size"></el-pagination>
</div>
</div>
</div>
</template>
<style lang="less" scoped>
.el-table__header{
width:100%;
.el-table__header {
width: 100%;
}
</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