410 lines
12 KiB
Vue
410 lines
12 KiB
Vue
<template>
|
|
<div class="test_cli admin_page">
|
|
<div class="admin_table_search">
|
|
<div class="admin_state">
|
|
|
|
<div class="admin_state_item">
|
|
<span>Start Date:</span>
|
|
<a-range-picker
|
|
style="width:250px"
|
|
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>Start Time:</span>
|
|
<a-time-range-picker style="width:250px" class="range_picker" valueFormat="HH:mm:ss" v-model:value="rangeTimeValue" />
|
|
</div> -->
|
|
<div class="admin_state_item">
|
|
<span>Expired or not:</span>
|
|
<a-select
|
|
v-model:value="isExpired"
|
|
show-search
|
|
allowClear
|
|
style="width: 250px"
|
|
placeholder="Please select"
|
|
:options="changeList"
|
|
@keydown.enter="gettrialList"
|
|
></a-select>
|
|
</div>
|
|
<div class="admin_state_item">
|
|
<span>Cooperator:</span>
|
|
<input
|
|
v-model="cooperator"
|
|
placeholder="Please enter cooperator"
|
|
@keydown.enter="gettrialList"
|
|
type="text"
|
|
style="width: 250px"
|
|
/>
|
|
</div>
|
|
<div class="admin_state_item">
|
|
<span>Promotion Code:</span>
|
|
<input
|
|
v-model="promotionCode"
|
|
placeholder="Please enter promotion code"
|
|
@keydown.enter="gettrialList"
|
|
type="text"
|
|
style="width: 250px"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div class="admin_search">
|
|
<div class="admin_search_item" @click="searchHistoryList">Search</div>
|
|
<div class="admin_search_item" @click="addhHistoryList">
|
|
Add
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="admin_table_content" ref="historyTable">
|
|
<a-table
|
|
@resizeColumn="handleResizeColumn"
|
|
:columns="columns"
|
|
:data-source="dataList"
|
|
:scroll="{ y: historyTableHeight }"
|
|
@change="changePage"
|
|
: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="deletePromCode(record)"
|
|
style="margin-right: 2rem;"
|
|
>
|
|
Delete
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</a-table>
|
|
</div>
|
|
<allUserPoerationsVue ref="allUserPoerationsVue" @searchHistoryList="searchHistoryList"></allUserPoerationsVue>
|
|
</div>
|
|
</template>
|
|
<script lang="ts">
|
|
import { defineComponent, ref, reactive, toRefs, computed, toRef, createVNode } from "vue";
|
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
|
import { useStore } from "vuex";
|
|
import { Modal,message,Upload,CascaderProps } from 'ant-design-vue';
|
|
import { Https } from "@/tool/https";
|
|
import allUserPoerationsVue from "./addAllUser.vue";
|
|
export default defineComponent({
|
|
components: {
|
|
allUserPoerationsVue
|
|
},
|
|
setup() {
|
|
const store:any = useStore()
|
|
let rangePickerValue: any = ref([]);
|
|
let rangeTimeValue: any = ref([]);
|
|
let renameData: any = ref({}); //修改名字选中的数据
|
|
const dataDom = reactive({
|
|
allUserPoerationsVue:null as any,
|
|
})
|
|
const columns: any = computed(() => {
|
|
return [
|
|
{
|
|
title: 'Id',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "id",
|
|
key: "id",
|
|
width:100,
|
|
sorter: true,
|
|
fixed: "left",
|
|
},
|
|
|
|
{
|
|
title: 'cooperator',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "cooperator",
|
|
key: "cooperator",
|
|
width:150,
|
|
},
|
|
|
|
{
|
|
title: 'Promotion Code',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "promotionCode",
|
|
key: "promotionCode",
|
|
width:150,
|
|
},
|
|
{
|
|
title: 'Redeem By',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "redeemBy",
|
|
key: "redeemBy",
|
|
width:150,
|
|
customRender: (record: any) => {
|
|
if(record.text){
|
|
const startTime = new Date(record.text * 1000);
|
|
const timezoneOffset = startTime.getTimezoneOffset() * 60000;
|
|
const localDate = new Date(startTime.getTime() - timezoneOffset);
|
|
return localDate.toISOString().split('T')[0] // "2025-04-24"
|
|
}
|
|
},
|
|
},
|
|
{
|
|
title: 'percent Off',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "percentOff",
|
|
key: "percentOff",
|
|
width:150,
|
|
customRender: (record: any) => {
|
|
return record.text+'%'
|
|
},
|
|
},
|
|
{
|
|
title: 'commissionRate',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "commissionRate",
|
|
key: "commissionRate",
|
|
width:150,
|
|
customRender: (record: any) => {
|
|
return record.text+'%'
|
|
},
|
|
},
|
|
{
|
|
title: 'Start Time',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "startTime",
|
|
key: "startTime",
|
|
width:150,
|
|
customRender: (record: any) => {
|
|
if(record.text){
|
|
const startTime = new Date(record.text * 1000);
|
|
const timezoneOffset = startTime.getTimezoneOffset() * 60000;
|
|
const localDate = new Date(startTime.getTime() - timezoneOffset);
|
|
return localDate.toISOString().split('T')[0] // "2025-04-24"
|
|
}
|
|
},
|
|
},
|
|
|
|
{
|
|
title: 'Total Earnings',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "totalEarnings",
|
|
key: "totalEarnings",
|
|
width:150,
|
|
},
|
|
{
|
|
title: 'Commission',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "commission",
|
|
key: "commission",
|
|
width:150,
|
|
},
|
|
{
|
|
title: 'Paid Commission',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "paidCommission",
|
|
key: "paidCommission",
|
|
width:150,
|
|
},
|
|
{
|
|
title: 'Unpaid Commission',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "unpaidCommission",
|
|
key: "unpaidCommission",
|
|
width:150,
|
|
},
|
|
//
|
|
{
|
|
title: 'Remark',
|
|
align: "center",
|
|
ellipsis: true,
|
|
dataIndex: "remark",
|
|
key: "remark",
|
|
width:150,
|
|
},
|
|
{
|
|
title: 'Max Redemptions',
|
|
align: "center",
|
|
dataIndex: "maxRedemptions",
|
|
key: "maxRedemptions",
|
|
width:200,
|
|
},
|
|
{
|
|
title: "Operations",
|
|
key: "operation",
|
|
width:120,
|
|
align: "center",
|
|
fixed: "right",
|
|
// slots:{customRender:'action'}
|
|
Operations: true,
|
|
},
|
|
];
|
|
});
|
|
|
|
let cooperator = ref('')
|
|
let promotionCode = ref('')
|
|
let dataList: any = ref([]);
|
|
let status: any = ref(0);
|
|
let orderBy: any = ref(0);
|
|
// let filterOption = (input: any, option: any) => {
|
|
// // 使用 option.label 进行搜索
|
|
// return option.label.toLowerCase().indexOf(input.toLowerCase()) >= 0;
|
|
// };
|
|
const changeList = ref([
|
|
{
|
|
value: '',
|
|
label: 'All',
|
|
},
|
|
{
|
|
value: 'false',
|
|
label: 'No',
|
|
},
|
|
{
|
|
value: 'true',
|
|
label: 'Yes',
|
|
}
|
|
])
|
|
let addhHistoryList = () => {
|
|
dataDom.allUserPoerationsVue.init('Add','')
|
|
};
|
|
let setAagree = (data:any) =>{
|
|
dataDom.allUserPoerationsVue.init('Edit',data)
|
|
}
|
|
|
|
return {
|
|
...toRefs(dataDom),
|
|
rangePickerValue,
|
|
rangeTimeValue,
|
|
columns,
|
|
dataList,
|
|
cooperator,
|
|
promotionCode,
|
|
renameData,
|
|
status,
|
|
changeList,
|
|
orderBy,
|
|
addhHistoryList,
|
|
setAagree,
|
|
};
|
|
},
|
|
data() {
|
|
return {
|
|
currentPage: 1,
|
|
pageSize: 10,
|
|
total: 0,
|
|
isExpired:'',
|
|
historyTableHeight: 0,
|
|
handleResizeColumn: (w:any, col:any) => {
|
|
col.width = w;
|
|
},
|
|
};
|
|
},
|
|
mounted() {
|
|
let historyTable: any = this.$refs.historyTable;
|
|
this.historyTableHeight = historyTable.clientHeight - 200;
|
|
this.gettrialList();
|
|
},
|
|
methods: {
|
|
//改变页码
|
|
changePage(e: any, filters:any, sorter:any) {
|
|
this.currentPage = e.current;
|
|
this.pageSize = e.pageSize;
|
|
if(sorter.order){
|
|
if(sorter.columnKey == 'id'){
|
|
this.orderBy = 'id'
|
|
}
|
|
}
|
|
this.orderBy = sorter.order == "descend" ? "DESC" : "ASC";
|
|
this.gettrialList();
|
|
},
|
|
|
|
//查询列表
|
|
searchHistoryList() {
|
|
this.currentPage = 1;
|
|
this.gettrialList();
|
|
},
|
|
deletePromCode(value:any){
|
|
let this_ = this
|
|
Modal.confirm({
|
|
title: 'Are you sure you want to delete this discount record',
|
|
icon: createVNode(ExclamationCircleOutlined),
|
|
okText: 'Yes',
|
|
cancelText: 'No',
|
|
mask:false,
|
|
centered:true,
|
|
onOk() {
|
|
Https.axiosGet(Https.httpUrls.deletePromCode,{params:{id:value.id}}).then((res:any)=>{
|
|
this_.gettrialList()
|
|
})
|
|
}
|
|
});
|
|
},
|
|
//获取列表
|
|
gettrialList() {
|
|
// let startTime: any = this.rangeTimeValue[0]
|
|
// ? this.rangeTimeValue[0]
|
|
// : '00:00:00';
|
|
// let endTime: any = this.rangeTimeValue[1]
|
|
// ? this.rangeTimeValue[1]
|
|
// : '23:59:59';
|
|
let startDate: any = this.rangePickerValue[0]
|
|
? this.rangePickerValue[0]+' '+'00:00:00'
|
|
: "";
|
|
let endDate: any = this.rangePickerValue[1]
|
|
? this.rangePickerValue[1]+' '+'23:59:59'
|
|
: "";
|
|
let data = {
|
|
endTime:endDate,
|
|
startTime:startDate,
|
|
cooperator:this.cooperator,//合作商
|
|
isExpired:this.isExpired,//是否过期
|
|
promotionCode:this.promotionCode,//优惠码
|
|
orderById:this.orderBy,//排序字段
|
|
size:this.pageSize,
|
|
page:this.currentPage,
|
|
}
|
|
Https.axiosPost(Https.httpUrls.getAllCoupons,data).then((rv: any) => {
|
|
if (rv) {
|
|
this.dataList = rv.records
|
|
this.total = rv.total
|
|
// this.workspaceItem.position = this.singleTypeList[0].label
|
|
}
|
|
})
|
|
},
|
|
},
|
|
});
|
|
</script>
|
|
<style lang="less" scoped>
|
|
.admin_page .admin_table_search .admin_state {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
}
|
|
</style> |