布局修改 部分bug修复

This commit is contained in:
X1627315083
2025-08-22 10:27:48 +08:00
parent 141821a843
commit 594bf5ce0a
275 changed files with 5675 additions and 13049 deletions

View File

@@ -0,0 +1,220 @@
<template>
<div class="allUserPoerationModal" ref="allUserPoerationModal"></div>
<a-modal
class="allUserPoeration_modal generalModel"
v-model:visible="operationsModal"
:footer="null"
:get-container="() => $refs.allUserPoerationModal"
width="50%"
height="55rem"
:maskClosable="false"
:centered="true"
:closable="false"
:mask="true"
wrapClassName="#app"
:keyboard="false"
>
<div class="generalModel_btn">
<div class="generalModel_closeIcon" @click.stop="cancelDsign">
<svg
width="100%" height="100%"
viewBox="0 0 46 46"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<circle cx="23" cy="23" r="23" fill="black" fill-opacity="0.3" />
<rect
x="32.5063"
y="12"
width="3"
height="29"
rx="1.5"
transform="rotate(45 32.5063 12)"
fill="white"
/>
<rect
x="34.6274"
y="32.5059"
width="3"
height="29"
rx="1.5"
transform="rotate(135 34.6274 32.5059)"
fill="white"
/>
</svg>
</div>
</div>
<div class="modal_title_text">
<div>{{ title }} </div>
</div>
<div class="allUserPoeration_center admin_page">
<div class="admin_state_item">
<span>Id: <span>*</span></span>
<input
v-model="id"
placeholder="Please enter user name"
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Amount: <span>*</span></span>
<input
v-model="amount"
placeholder="Please enter email"
type="text"
style="width: 250px"
/>
</div>
<div class="admin_state_item">
<span>Status: <span>*</span></span>
<a-select
v-model:value="selectStatus"
size="large"
style="width: 230px"
optionFilterProp="label"
:options="stateList"
placeholder="Please select"
allowClear
show-search
></a-select>
</div>
</div>
<div class="allUserPoeration_btn admin_page">
<div class="admin_search_item" @click="cancelDsign">Close</div>
<div class="admin_search_item" @click="setOk">OK</div>
</div>
</a-modal>
<div class="mark_loading" v-show="loadingShow">
<a-spin size="large" />
</div>
</template>
<script>
import {
defineComponent,
ref,
reactive,
watch,
onMounted,
nextTick,
toRefs,
} from "vue";
import { Https } from "@/tool/https";
import { Modal, message } from "ant-design-vue";
import { ExclamationCircleOutlined } from "@ant-design/icons-vue";
import md5 from "md5";
export default defineComponent({
components: {},
emits: ["searchHistoryList"],
props:{
stateList:{
type:Array,
default:()=>[],
},
},
setup(props, { emit }) {
let operations = reactive({
operationsModal: false,
operationsEdit: false,
loadingShow: false,
title: "",
});
let operationsData = reactive({
id: "",
amount: "",
selectStatus:'',
});
let init = (funStr, data) => {
operations.operationsModal = true;
operations.operationsEdit = true;
operations.title = funStr;
if (funStr == "Add") operations.operationsEdit = false;
if (funStr == "Edit") {
operationsData.id = data.id;
operationsData.amount = data.amount;
operationsData.selectStatus = data.status;
}
};
let setAddData = () => {
return {
amount: operationsData.amount,
id: operationsData.id,
};
};
let setEditData = () => {
return {
id: operationsData.id,
amount: operationsData.amount,
status: operationsData.selectStatus,
};
};
let cancelDsign = () => {
operationsData.id = "";
operationsData.amount = "";
operationsData.selectStatus = "",
operations.operationsModal = false;
};
let setOk = () => {
let data;
if (
!data.id ||
!data.amount
)
return message.warning("Please check the input box marked with *");
data = setEditData();
Https.axiosPost(Https.httpUrls.editReferral, data).then(
(rv) => {
if (rv) {
cancelDsign();
emit("searchHistoryList");
}
}
);
};
return {
...toRefs(operations),
...toRefs(operationsData),
cancelDsign,
init,
setOk,
};
},
data() {
return {};
},
mounted() {},
methods: {},
});
</script>
<style lang="less" scoped>
:deep(.allUserPoeration_modal) {
.ant-modal-body {
display: flex;
flex-direction: column;
}
}
</style>
<style lang="less" scoped>
.allUserPoeration_modal {
.closeIcon {
z-index: 2;
}
.allUserPoeration_btn {
display: flex;
flex-direction: row;
height: auto;
justify-content: flex-end;
padding: 1rem 0;
.admin_search_item {
margin-bottom: 0;
}
}
.allUserPoeration_center {
flex: 1;
overflow-y: auto;
flex-direction: row;
flex-wrap: wrap;
}
}
</style>

View File

@@ -0,0 +1,420 @@
<template>
<div class="admin_page">
<div class="admin_table_search">
<div class="admin_state">
<div class="admin_state_item">
<span>Create Time:</span>
<a-range-picker
style="width: 230px"
class="range_picker"
v-model:value="rangePickerValue"
: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>Status:</span>
<a-select
v-model:value="selectStatus"
size="large"
style="width: 230px"
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 class="admin_search_item" style="width: auto;padding: 0 2rem;" @click="deleteInBatches">
Delete In Batches
</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"
:row-selection="rowSelection"
rowKey="id"
:scroll="{ y: historyTableHeight }"
@change="changePage"
:showSorterTooltip='false'
:pagination="{
showSizeChanger: true,
current: currentPage,
pageSize: pageSize,
total: total,
showQuickJumper: true,
bordered: false,
}"
>
<template #bodyCell="{ column, text, record, index }">
<div class="operate_list" v-if="column?.Operations">
<div
class="operate_item"
@click="setAagree(record)"
style="margin-right: 2rem;"
>
Edit
</div>
<div
class="operate_item"
@click="deleteAagree(record)"
>
Delete
</div>
<!-- <div
class="operate_item"
@click="deleteGroup(record, index)"
>
Delete
</div> -->
</div>
</template>
</a-table>
</div>
<editReferral ref="editReferral" :stateList="[...state].splice(1,state.length-1)" @searchHistoryList="searchHistoryList"></editReferral>
</div>
</template>
<script lang="ts">
import {
defineComponent,
ref,
createVNode,
computed,
reactive,
toRefs,
onMounted,
} from "vue";
import { formatTime } from "@/tool/util";
import { useStore } from "vuex";
import { Https } from "@/tool/https";
import { Modal,message } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import editReferral from "./editReferral.vue";
export default defineComponent({
components: {editReferral,},
setup() {
const store:any = useStore()
const selectedRowKeys = ref([]) as any;
const onSelectChange = (changableRowKeys: string[]) => {
selectedRowKeys.value = changableRowKeys;
};
let filter: any = reactive({
dataList: [],
tableLoading: false,
allUserList: computed(()=>{
return store.state.adminPage.allUserList
}),
rowSelection:computed(() => {
return {
selectedRowKeys: unref(selectedRowKeys),
onChange: onSelectChange,
}
})
});
let filterData: any = reactive({
rangePickerValue: [],
currentPage: 1,
pageSize: 10,
total: 0,
selectStatus:'',
affiliateId:'',
});
let state: any = ref([
{
label: "all",
value: "",
},
{
label:'Paid',
value:'Paid',
},
{
label:'Unpaid',
value:'Unpaid',
},
{
label:'Pending',
value:'Pending',
},
{
label:'Access',
value:'Access',
},
{
label: "Rejected",
value: "Rejected",
},
]);
let renameData: any = ref({}); //修改名字选中的数据
const columns: any = computed(() => {
return [
{
title: "Id",
align: "center",
dataIndex: "id",
key: "id",
width:100,
fixed: "left",
},
{
title: "Commission",
align: "center",
dataIndex: "commission",
key: "commission",
width:200,
ellipsis:true
},
{
title: "User Name",
align: "center",
dataIndex: "affiliateName",
key: "affiliateName",
width:150,
ellipsis:true
// customRender: (record: any) => {
// let time = formatTime(
// record.text / 1000,
// "YYYY-MM-DD hh:mm:ss"
// );
// return time;
// },
},
{
title: "Payment Info Id",
align: "center",
dataIndex: "paymentInfoId",
key: "paymentInfoId",
width:100,
ellipsis:true,
},
{
title: "Create Time",
align: "center",
dataIndex: "createTime",
key: "createTime",
width:200,
},
{
title: "Status",
align: "center",
dataIndex: "status",
key: "status",
width:200,
},
{
title: "Operations",
key: "operation",
width:120,
align: "center",
fixed: "right",
// slots:{customRender:'action'}
Operations: true,
},
];
});
//改变页码
let changePage = (e: any, filters:any, sorter:any) => {
filterData.currentPage = e.current;
filterData.pageSize = e.pageSize;
gettrialList();
};
//查询列表
let searchHistoryList = () => {
filterData.currentPage = 1;
gettrialList();
};
let clearHistoryList = () => {
filterData.rangePickerValue = []
filterData.currentPage = 1
filterData.pageSize = 10
filterData.total = 0
filterData.selectStatus = ''
filterData.affiliateId = ''
};
let setHistoryListData = () => {
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,
status: filterData.selectStatus,
affiliateId: filterData.affiliateId,
};
return data;
};
//获取列表
let gettrialList = () => {
filter.tableLoading = true;
let data = setHistoryListData();
Https.axiosPost(Https.httpUrls.getReferrals, data).then(
(rv: any) => {
if (rv) {
console.log(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) => {
clearHistoryList();
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[0] = formatTime(
thirtyDaysAgoTimestamp,
"YYYY-MM-DD"
);
gettrialList();
};
let filterOption = (input: any, option: any) => {
// 使用 option.label 进行搜索
return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
};
let editReferral = ref()
let setAagree = (data:any) =>{
editReferral.value.init('Edit',data)
}
const confirmDelete = ()=>{
return new Promise<void>((resolve, reject) => {
Modal.confirm({
title: 'Are you sure you want to delete this item?',
icon: createVNode(ExclamationCircleOutlined),
okText: 'Yes',
cancelText: 'No',
centered:true,
onOk() {
resolve(true)
},
onCancel(){
resolve(false)
}
});
})
}
const deleteInBatches = async ()=>{
if(selectedRowKeys.value.length == 0)return
let boolean:any = await confirmDelete()
if(!boolean){
return
}
Https.axiosPost(Https.httpUrls.batchDeleteReferral,selectedRowKeys.value)
.then((rv:any)=>{
gettrialList();
})
}
const deleteAagree = async (event:any)=>{
let boolean:any = await confirmDelete()
if(!boolean){
return
}
Https.axiosPost(Https.httpUrls.batchDeleteReferral,[event.id])
.then((rv:any)=>{
gettrialList();
})
}
onMounted(() => {
gettrialList();
});
return {
...toRefs(filter),
...toRefs(filterData),
state,
columns,
renameData,
changePage,
searchHistoryList,
lastGeTrialList,
gettrialList,
filterOption,
editReferral,
setAagree,
deleteInBatches,
deleteAagree,
};
},
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>
<style lang="less" scoped>
.admin_page .admin_table_search .admin_state {
display: flex;
width: 75%;
flex-wrap: wrap;
align-content: flex-start;
}
.admin_page .admin_table_search .admin_search {
display: flex;
flex-wrap: wrap;
width: 25%;
}
</style>

View File

@@ -51,7 +51,6 @@
<div class="gallery_btn" style="margin-right: 1rem;" @click="search">Search</div>
</div>
<div class="echarts" ref="echarts">
213
</div>
</div>
</div>
@@ -122,6 +121,7 @@ export default defineComponent({
})
}
const copyLink = (e:any)=>{
if(!navigator?.clipboard?.writeText)return
navigator.clipboard.writeText(e.target.innerText)
.then(() => {
message.success('Copy Successful')