11 changed files with 3736 additions and 574 deletions
@ -0,0 +1,184 @@ |
|||||||
|
<template> |
||||||
|
<div class="game-order-container"> |
||||||
|
<el-card shadow="hover"> |
||||||
|
<div class="game-order-search mb15"> |
||||||
|
<el-form label-position="right" :inline="true"> |
||||||
|
<el-form-item label="起始时间" prop="times"> |
||||||
|
<el-date-picker |
||||||
|
type="datetimerange" |
||||||
|
size="default" |
||||||
|
v-model="tableData.param.times" |
||||||
|
style="width: 400px" |
||||||
|
range-separator="-" |
||||||
|
start-placeholder="开始" |
||||||
|
end-placeholder="结束" |
||||||
|
format="YYYY-MM-DD HH:mm:ss" |
||||||
|
value-format="x" |
||||||
|
/> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="商户单号" prop="order"> |
||||||
|
<el-input size="default" v-model="tableData.param.order" placeholder="请输入商户单号" clearable /> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item> |
||||||
|
<el-button size="default" type="primary" class="ml10" @click="orderList"> |
||||||
|
<el-icon> |
||||||
|
<ele-Search /> |
||||||
|
</el-icon> |
||||||
|
查询 |
||||||
|
<div v-if="!!tableData.param.continuationToken">下一页</div> |
||||||
|
</el-button> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
</div> |
||||||
|
<el-table :data="tableData.data" style="width: 100%" stripe border> |
||||||
|
<el-table-column prop="orderNo" label="商户单号" width="300"></el-table-column> |
||||||
|
<el-table-column prop="productName" label="商品名称" width="180"></el-table-column> |
||||||
|
<el-table-column prop="tradeType" label="交易类型" width="100"> |
||||||
|
<template #default="scope"> |
||||||
|
<div v-if="scope.row.tradeType">支付</div> |
||||||
|
<div v-else>退款</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="tradeState" label="订单状态" width="100"> |
||||||
|
<template #default="scope"> |
||||||
|
<div v-if="scope.row.tradeState==0">成功</div> |
||||||
|
<div v-else-if="scope.row.tradeState==2">失败</div> |
||||||
|
<div v-else-if="scope.row.tradeState==4">未支付</div> |
||||||
|
<div v-else>{{scope.row.tradeState}}</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="payMoney" label="支付金额(元)" width="120"></el-table-column> |
||||||
|
<el-table-column prop="couponAmt" label="优惠券金额(元)" width="130"></el-table-column> |
||||||
|
<el-table-column prop="currency" label="币种" width="70"></el-table-column> |
||||||
|
<el-table-column prop="country" label="country" width="100"></el-table-column> |
||||||
|
<el-table-column prop="orderTime" label="下单时间" show-overflow-tooltip width="200"> |
||||||
|
<template #default="scope"> |
||||||
|
{{new Date(scope.row.orderTime).toLocaleString()}} |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="tradeTime" label="支付时间" show-overflow-tooltip width="200"> |
||||||
|
<template #default="scope"> |
||||||
|
{{new Date(scope.row.tradeTime).toLocaleString()}} |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</el-card> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
|
||||||
|
<script lang="ts"> |
||||||
|
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||||
|
import { allChannelList, ServerCategorize, serverList, ServerList } from '/@/utils/game'; |
||||||
|
import RechargeConfigCategory from '/@/api/config/RechargeConfigCategory.json'; |
||||||
|
import { gSwitchServer } from '/@/utils/utils'; |
||||||
|
import { getHuaWeiOrderList } from '/@/api/game/order'; |
||||||
|
import { ElMessage } from 'element-plus/es'; |
||||||
|
|
||||||
|
// 定义接口来定义对象的类型 |
||||||
|
interface TableData { |
||||||
|
id: string; |
||||||
|
CreateTime: string; |
||||||
|
CfgId: number; |
||||||
|
Rmb: number; |
||||||
|
SilverPiece: number; |
||||||
|
Identity: string; |
||||||
|
timeStr: string; |
||||||
|
uid: string; |
||||||
|
RealName: string; |
||||||
|
StringId: string; |
||||||
|
} |
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
serverSwitch: number; |
||||||
|
serverCategorize: object; |
||||||
|
tableData: { |
||||||
|
data: Array<TableData>; |
||||||
|
total: number; |
||||||
|
param: { |
||||||
|
times: string[]; |
||||||
|
order: string; |
||||||
|
continuationToken: string; |
||||||
|
}; |
||||||
|
order: object; |
||||||
|
}; |
||||||
|
servers: object; |
||||||
|
channels: object; |
||||||
|
rechargeInfo: object[]; |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1GameOrderHuaWeiOrder', |
||||||
|
setup() { |
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
serverSwitch: 0, |
||||||
|
serverCategorize: ServerCategorize, |
||||||
|
tableData: { |
||||||
|
data: [], |
||||||
|
total: 0, |
||||||
|
param: { |
||||||
|
times: [], |
||||||
|
order: '', |
||||||
|
continuationToken: '', |
||||||
|
}, |
||||||
|
order: [], |
||||||
|
}, |
||||||
|
servers: ServerList, |
||||||
|
channels: [], |
||||||
|
rechargeInfo: RechargeConfigCategory, |
||||||
|
}); |
||||||
|
|
||||||
|
const orderList = (reset) => { |
||||||
|
if (!reset) { |
||||||
|
state.tableData.total = 0; |
||||||
|
} |
||||||
|
state.tableData.param.startAt = state.tableData.param.times[0]; |
||||||
|
state.tableData.param.endAt = state.tableData.param.times[1]; |
||||||
|
if (!state.tableData.param.endAt || !state.tableData.param.startAt) { |
||||||
|
ElMessage.error('请填写时间!'); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (state.tableData.param.endAt - state.tableData.param.startAt > 48 * 60 * 60 * 1000) { |
||||||
|
ElMessage.error('时间指定在48小时之内!'); |
||||||
|
return; |
||||||
|
} |
||||||
|
getHuaWeiOrderList(state.tableData.param).then((res) => { |
||||||
|
if (!res.data || !res.data.order) { |
||||||
|
return; |
||||||
|
} |
||||||
|
console.log(res); |
||||||
|
state.tableData.param.continuationToken = res.data.order.continuationToken; |
||||||
|
state.tableData.data = res.data.order.orderInfoList || []; |
||||||
|
if (state.tableData.param.order.length > 0) { |
||||||
|
state.tableData.data = state.tableData.data.filter((item) => { |
||||||
|
return item.orderNo == state.tableData.param.order; |
||||||
|
}); |
||||||
|
if (state.tableData.data.length == 0 && !!state.tableData.param.continuationToken && state.tableData.total < 5) { |
||||||
|
orderList(true); |
||||||
|
state.tableData.total++; |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
// 页面加载时 |
||||||
|
onMounted(() => { |
||||||
|
serverList().then((res) => { |
||||||
|
state.servers = res; |
||||||
|
}); |
||||||
|
allChannelList().then((res) => { |
||||||
|
state.channels = res; |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
const switchServer = () => { |
||||||
|
return gSwitchServer(state.serverSwitch, state.servers); |
||||||
|
}; |
||||||
|
|
||||||
|
return { |
||||||
|
switchServer, |
||||||
|
orderList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
@ -0,0 +1,198 @@ |
|||||||
|
<template> |
||||||
|
<div class="system-edit-post-container"> |
||||||
|
<el-form size="default" label-width="80px"> |
||||||
|
<el-card shadow="hover" header="战令历史"> |
||||||
|
<template #header> |
||||||
|
战令历史 |
||||||
|
<el-button v-show="item.show === false" @click="item.show = true" class="button-caret" type="text"> |
||||||
|
<el-icon> |
||||||
|
<ele-CaretBottom /> |
||||||
|
</el-icon> |
||||||
|
</el-button> |
||||||
|
<el-button v-show="item.show === true" @click="item.show = false" class="button-caret" type="text"> |
||||||
|
<el-icon> |
||||||
|
<ele-CaretTop /> |
||||||
|
</el-icon> |
||||||
|
</el-button> |
||||||
|
</template> |
||||||
|
<div v-show="item.show"> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-form :inline="true"> |
||||||
|
<el-form-item label="服务器"> |
||||||
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||||
|
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
|
<el-select v-model="query.serverId" placeholder="选择服务器" @change="getProp" filterable> |
||||||
|
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||||
|
</el-select> |
||||||
|
</el-form-item> |
||||||
|
</el-form> |
||||||
|
</div> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-table ref="tableRef" :data="tableData.list" style="width: 100%" border> |
||||||
|
<el-table-column prop="PeriodId" label="当前期数" width="85"> |
||||||
|
<template #default="scope"> {{ scope.row.PeriodId }}期</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="State" label="状态" width="100"> |
||||||
|
<template #default="scope"> |
||||||
|
<div v-if="scope.row.State == 1" style="color: #f81f26">开启</div> |
||||||
|
<div v-else-if="scope.row.State == 2">关闭</div> |
||||||
|
<div v-else-if="scope.row.State == 3" style="color: #66b7cf">未开启</div> |
||||||
|
<div v-else>{{ scope.row.State }}</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="BeginTime" label="开始时间" width="100" /> |
||||||
|
<el-table-column prop="EndTime" label="结束时间" width="100" /> |
||||||
|
</el-table> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</el-card> |
||||||
|
</el-form> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
<script lang="ts"> |
||||||
|
import { defineComponent, onMounted, reactive, ref, toRefs } from 'vue'; |
||||||
|
import { gameGMGetBattlePass } from '/@/api/game/gameConfig'; |
||||||
|
import BattlePassConfigCategory from '/@/api/config/BattlePassConfigCategory.json'; |
||||||
|
import { ElLoading } from 'element-plus'; |
||||||
|
import { ServerCategorize, serverList } from '/@/utils/game'; |
||||||
|
import { gSwitchServer, uniquePeriodId } from '/@/utils/utils'; |
||||||
|
|
||||||
|
interface TableDataState { |
||||||
|
query: object; |
||||||
|
tableData: { list: object[] }; |
||||||
|
battlePassConfig: object; |
||||||
|
servers: object; |
||||||
|
serverCategorize: object[]; |
||||||
|
serverSwitch: number; |
||||||
|
} |
||||||
|
|
||||||
|
export default defineComponent({ |
||||||
|
name: 'apiV1ServerBattlePassLog', |
||||||
|
setup: function () { |
||||||
|
const tableRef = ref(); |
||||||
|
const state = reactive<TableDataState>({ |
||||||
|
item: { topShow: true, show: true }, |
||||||
|
query: { |
||||||
|
serverId: '', |
||||||
|
periodId: '', |
||||||
|
}, |
||||||
|
tableData: { list: [] }, |
||||||
|
battlePassConfig: BattlePassConfigCategory, |
||||||
|
servers: [], |
||||||
|
serverCategorize: ServerCategorize, |
||||||
|
serverSwitch: 0, |
||||||
|
}); |
||||||
|
|
||||||
|
onMounted(() => { |
||||||
|
serverList().then((res) => { |
||||||
|
state.servers = res; |
||||||
|
console.log('serverList:', res); |
||||||
|
state.query.serverId = res[0].id; |
||||||
|
getProp(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
const getProp = () => { |
||||||
|
const loading = ElLoading.service({ |
||||||
|
lock: true, |
||||||
|
text: 'Loading', |
||||||
|
background: 'rgba(0, 0, 0, 0.7)', |
||||||
|
}); |
||||||
|
state.tableData.list = []; |
||||||
|
gameGMGetBattlePass({ serverId: state.query.serverId }) |
||||||
|
.then((res) => { |
||||||
|
console.log('gameGMGetBattlePass: ', res); |
||||||
|
if (res.code != 0 || !res.data || !res.data.list) { |
||||||
|
return; |
||||||
|
} |
||||||
|
state.tableData.list = res.data.list; |
||||||
|
let now = new Date().getTime() / 1000; |
||||||
|
console.log('gameGMGetBattlePass: time ', now); |
||||||
|
let BattlePassConfig = unique(); |
||||||
|
console.log('gameGMGetBattlePass: BattlePassConfig ', BattlePassConfig); |
||||||
|
BattlePassConfig.forEach((data) => { |
||||||
|
let item = state.tableData.list.find((r) => r.PeriodId === data.PeriodId); |
||||||
|
if (!item) { |
||||||
|
state.tableData.list.push({ PeriodId: data.PeriodId }); |
||||||
|
return; |
||||||
|
} |
||||||
|
if (item.BeginTime >= now) { |
||||||
|
item.State = 3; |
||||||
|
} |
||||||
|
item.BeginTime = new Date(item.BeginTime * 1000).toLocaleDateString(); |
||||||
|
item.EndTime = new Date(item.EndTime * 1000).toLocaleDateString(); |
||||||
|
}); |
||||||
|
state.tableData.list.sort((a, b) => { |
||||||
|
return a.PeriodId - b.PeriodId; |
||||||
|
}); |
||||||
|
// state.tableData.list.forEach((item) => { |
||||||
|
// if (item.BeginTime >= now) { |
||||||
|
// item.State = 3; |
||||||
|
// } |
||||||
|
// item.BeginTime = new Date(item.BeginTime * 1000).toLocaleDateString(); |
||||||
|
// item.EndTime = new Date(item.EndTime * 1000).toLocaleDateString(); |
||||||
|
// }); |
||||||
|
console.log('gameGMGetBattlePass: state.tableData.data', state.tableData.list); |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
loading.close(); |
||||||
|
}); |
||||||
|
}; |
||||||
|
|
||||||
|
const unique = () => { |
||||||
|
return uniquePeriodId(BattlePassConfigCategory); |
||||||
|
}; |
||||||
|
const switchServer = () => { |
||||||
|
return gSwitchServer(state.serverSwitch, state.servers); |
||||||
|
}; |
||||||
|
return { |
||||||
|
unique, |
||||||
|
switchServer, |
||||||
|
tableRef, |
||||||
|
getProp, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
|
}); |
||||||
|
</script> |
||||||
|
|
||||||
|
<style scoped lang="scss"> |
||||||
|
.el-table { |
||||||
|
--el-table-border-color: var(--el-border-color-lighter); |
||||||
|
--el-table-border: 2px solid var(--el-table-border-color); |
||||||
|
} |
||||||
|
|
||||||
|
.table-item { |
||||||
|
margin-top: 10px; |
||||||
|
margin-bottom: -10px; |
||||||
|
} |
||||||
|
|
||||||
|
.box-card .el-card__header { |
||||||
|
background-color: #062ce6; |
||||||
|
color: #fff; |
||||||
|
} |
||||||
|
|
||||||
|
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td { |
||||||
|
background: #f0ffd5; |
||||||
|
} |
||||||
|
|
||||||
|
.warning-row { |
||||||
|
background: #f0ffd5ff; |
||||||
|
} |
||||||
|
|
||||||
|
.white-row { |
||||||
|
background: #ffffff; |
||||||
|
} |
||||||
|
|
||||||
|
::v-deep .warning-row .el-table__body tr { |
||||||
|
background-color: #f0ffd5ff; |
||||||
|
} |
||||||
|
|
||||||
|
::v-deep .warning-row .el-table--enable-row-hover .el-table__body tr:hover > td { |
||||||
|
background-color: inherit; |
||||||
|
} |
||||||
|
|
||||||
|
::v-deep .warning-row .el-table__cell { |
||||||
|
background-color: #f0ffd5ff; |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue