Files
aida_front/src/component/Administrator/recentNewUser.vue
2025-11-03 17:03:26 +08:00

362 lines
10 KiB
Vue

<template>
<div class="recentNewUser admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Start Time:</span>
<a-range-picker
style="width:280px"
class="range_picker"
v-model:value="rangePickerValue"
:allowClear="false"
:placeholder="[
$t('HistoryPage.StartDate'),
$t('HistoryPage.EndDate'),
]"
valueFormat="YYYY-MM-DD"
>
<template #suffixIcon>
<span
class="icon iconfont range_picker_icon icon-rili"
></span>
</template>
</a-range-picker>
</div>
<div class="admin_state_item">
<span>Type:</span>
<a-select v-model:value="systemUser" size="large" style="width:280px" optionFilterProp="label" :options="state" placeholder="Please select" allowClear show-search></a-select>
</div>
</div>
<div class="admin_search">
<div class="admin_search_item" @click="searchHistoryList">Search</div>
</div>
<div class="admin_state_list">
<div class="admin_state_list_item" @click="lastGeTrialList('year')">Nearly a year</div>
<div class="admin_state_list_item" @click="lastGeTrialList('month')">Last month</div>
<div class="admin_state_list_item" @click="lastGeTrialList('week')">Last week</div>
</div>
</div>
<div class="admin_table_content" ref="historyTable">
<a-table
@resizeColumn="handleResizeColumn"
:loading="tableLoading"
:columns="columns"
:data-source="dataList"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip='false'
:pagination="{
showSizeChanger: true,
current: currentPage,
pageSize: pageSize,
total: total,
showQuickJumper: true,
bordered: false,
}"
>
</a-table>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, ref, createVNode, computed, reactive, toRefs, onMounted } from "vue";
import { formatTime } from "@/tool/util";
import { Https } from "@/tool/https";
export default defineComponent({
components: {
},
setup() {
let filter:any = reactive({
dataList:[],
tableLoading:false,
})
let filterData:any = reactive({
rangePickerValue:[],
currentPage: 1,
pageSize: 10,
total: 0,
systemUser:'',
order: "", //'Ascending 升序 Descending 降序'
orderBy:'',
})
let state:any = ref([
{
label:'all',
value:'',
},
{
label:'visitor',
value:'0',
},
{
label:'yearly',
value:'1',
},
{
label:'monthly',
value:'2',
},
{
label:'trial',
value:'3',
},
])
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "User Id",
align: "center",
dataIndex: "id",
key: "id",
width:100,
fixed: "left",
sorter: true,
},
{
title: "Email",
align: "center",
dataIndex: "userEmail",
key: "userEmail",
width:200,
ellipsis:true
},
{
title: "User Name",
align: "center",
dataIndex: "userName",
key: "userName",
width:150,
ellipsis:true
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: "language",
align: "center",
dataIndex: "language",
key: "language",
width:100,
ellipsis:true,
},
{
title: "Valid Start Time",
align: "center",
dataIndex: "validStartTime",
key: "validstartTime",
width:200,
ellipsis:true,
customRender: (record: any) => {
let time = ''
if(record.text){
time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
}
return time
},
},
{
title: "Valid End Time",
align: "center",
dataIndex: "validEndTime",
key: "validendTime",
width:200,
ellipsis:true,
customRender: (record: any) => {
let time = ''
if(record.text){
time = formatTime(record.text / 1000, 'YYYY-MM-DD hh:mm:ss')
}
return time
},
},
{
title: "Country or Region",
align: "center",
dataIndex: "country",
key: "country",
width:200,
},
{
title: "Create Date",
align: "center",
dataIndex: "createDate",
key: "createDate",
width:200,
sorter: true,
},
{
title: "Is Beginner",
align: "center",
dataIndex: "isBeginner",
key: "isBeginner",
width:80,
ellipsis:true,
customRender: (record: any) => {
let str;
if (record.value == 1) {
str = "Yes";
} else {
str = "No";
}
return str;
},
},
{
title: 'Machine Room Ip',
align: "center",
dataIndex: "browserIdentifiers",
key: "browserIdentifiers",
width:200,
},
{
title: "Credits",
align: "center",
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "credits",
key: "credits",
width:100,
sorter: true,
},
{
title: 'User Type',
align: "center",
// width: 150,
// minWidth: 100,
// maxWidth: 200,
// resizable: true,
dataIndex: "systemUser",
key: "systemUser",
width:100,
customRender: (record: any) => {
let str;
if (record.value == 0) {
str = "visitor";
} else if (record.value == 1) {
str = "yearly";
} else if (record.value == 2) {
str = "monthly";
} else if (record.value == 3) {
str = "trial";
} else if (record.value == 4) {
str = "userInEvent";
}
return str;
},
},
];
});
//改变页码
let changePage = (e: any, filters:any, sorter:any) => {
filterData.currentPage = e.current;
filterData.pageSize = e.pageSize;
if(sorter.order){
if(sorter.columnKey == 'id'){
filterData.orderBy = 'id'
}else if(sorter.columnKey == "createDate"){
filterData.orderBy = 'time'
}else if(sorter.columnKey == "credits"){
filterData.orderBy = 'credits'
}
}
if(sorter.order){
filterData.order = sorter.order == "descend" ? "Descending" : "Ascending";
}else{
filterData.order = ''
}
gettrialList();
}
//查询列表
let searchHistoryList = ()=> {
filterData.currentPage = 1;
gettrialList();
}
//获取列表
let gettrialList = () =>{
filter.tableLoading = true
let startDate: any = filterData.rangePickerValue?.[0]
? filterData.rangePickerValue[0]+' '+'00:00:00'
: "";
let endDate: any = filterData.rangePickerValue?.[1]
? filterData.rangePickerValue[1]+' '+'23:59:59'
: "";
let data = {
endTime:endDate,
startTime:startDate,
size:filterData.pageSize,
page:filterData.currentPage,
systemUser:filterData.systemUser,
order: filterData.order,
orderBy: filterData.orderBy,
}
Https.axiosPost(Https.httpUrls.recentNewUser,data).then((rv: any) => {
if (rv) {
// this.dataList = rv
filter.dataList = rv.records
filterData.total = rv.total
filter.tableLoading = false
// this.workspaceItem.position = this.singleTypeList[0].label
}
})
}
let lastGeTrialList = (str:string)=>{
let currentDate = new Date();
let currentTimestamp = Math.floor(currentDate.getTime() / 1000);
// 计算30天前的时间戳
let thirtyDaysAgoTimestamp
if(str == 'year'){
thirtyDaysAgoTimestamp = currentTimestamp - (360 * 24 * 60 * 60);
}else if(str == 'month'){
thirtyDaysAgoTimestamp = currentTimestamp - (30 * 24 * 60 * 60);
}else if(str == 'week'){
thirtyDaysAgoTimestamp = currentTimestamp - (7 * 24 * 60 * 60);
}
filterData.rangePickerValue = [formatTime(thirtyDaysAgoTimestamp,'YYYY-MM-DD'),formatTime(currentTimestamp,'YYYY-MM-DD')]
gettrialList();
}
onMounted(()=>{
lastGeTrialList('month')
})
return {
...toRefs(filter),
...toRefs(filterData),
state,
columns,
renameData,
changePage,
searchHistoryList,
lastGeTrialList,
gettrialList,
};
},
data() {
return {
historyTableHeight: 0,
handleResizeColumn: (w:any, col:any) => {
col.width = w;
},
};
},
mounted() {
let historyTable: any = this.$refs.historyTable;
this.historyTableHeight = historyTable.clientHeight - 200;
},
methods: {
},
});
</script>