Browse Source

debug

master
linquan 3 months ago
parent
commit
c5fcfe9a04
  1. 8
      src/api/game/index.ts
  2. 12
      src/utils/game.ts
  3. 112
      src/views/gameBug/clientBug/component/editConfig.vue
  4. 148
      src/views/gameCdKey/list/editConfig.vue
  5. 2
      src/views/gameCdKey/list/index.vue
  6. 2
      src/views/gameCdKey/setKey/index.vue
  7. 5
      src/views/gameLoginUrl/list/index.vue
  8. 3
      src/views/gameLoginUrl/serverList/index.vue
  9. 2
      src/views/gameMail/mailList/index.vue
  10. 2
      src/views/gameMail/send/component/editConfig.vue
  11. 6
      src/views/gameMail/send/index.vue
  12. 24
      src/views/gameManage/copyUnit/index.vue
  13. 169
      src/views/gameManage/gm/index.vue
  14. 144
      src/views/gameManage/keep/index.vue
  15. 2
      src/views/gameMarket/buyModel/index.vue
  16. 2
      src/views/gameMarket/highPriceRecycleModel/index.vue
  17. 6
      src/views/gameMarket/sellModel/index.vue
  18. 4
      src/views/gameMarket/update/index.vue
  19. 16
      src/views/gameMonthly/lottery/index.vue
  20. 622
      src/views/gameNotice/customerService/index.vue
  21. 222
      src/views/gameNotice/pop/index.vue
  22. 10
      src/views/gameOrder/deposit/index.vue
  23. 223
      src/views/gameOrder/gmOrderList/index.vue
  24. 3
      src/views/gameOrder/orderLog/index.vue
  25. 8
      src/views/gameRole/account/index.vue
  26. 55
      src/views/gameRole/online/index.vue
  27. 10
      src/views/gameRole/role/index.vue
  28. 120
      src/views/gameSet/auditMode/component/editConfig.vue
  29. 91
      src/views/gameSet/auditMode/index.vue

8
src/api/game/index.ts

@ -916,3 +916,11 @@ export function getServerVersion(params: object) {
params: params, params: params,
}); });
} }
export function gmOrderList(params: object) {
return request({
url: '/api/v1/game/order/gmList',
method: 'get',
params: params,
});
}

12
src/utils/game.ts

@ -305,7 +305,13 @@ export const ServerCategorize = [
{ {
value: 3, value: 3,
label: '其他', label: '其他',
} },
];
export const GameSetList = [
{ value: 'enableHotfix', label: '是否开启热更' },
{ value: 'enableAccountLogin', label: '是否开启账密' },
{ value: 'loginUrlChannelList', label: '登录类别检索' },
]; ];
export async function channelList(): Promise<object[]> { export async function channelList(): Promise<object[]> {
@ -328,7 +334,7 @@ export async function serverList(): Promise<object[]> {
data.data.loginUrlList.forEach((res) => { data.data.loginUrlList.forEach((res) => {
res.name = getServerName(res); res.name = getServerName(res);
}); });
data.data.loginUrlList.sort((a, b) => a.id - b.id); data.data.loginUrlList.sort((a, b) => a.sort * 100000 + a.id - (b.sort * 100000 + b.id));
return data.data.loginUrlList ?? []; return data.data.loginUrlList ?? [];
} }
@ -337,7 +343,7 @@ export async function allServerList(): Promise<object[]> {
data.data.loginUrlList.forEach((res) => { data.data.loginUrlList.forEach((res) => {
res.name = getServerName(res); res.name = getServerName(res);
}); });
data.data.loginUrlList.sort((a, b) => a.id - b.id); data.data.loginUrlList.sort((a, b) => a.sort * 100000 + a.id - (b.sort * 100000 + b.id));
return [ return [
{ {
id: '', id: '',

112
src/views/gameBug/clientBug/component/editConfig.vue

@ -1,112 +0,0 @@
<template>
<div>
<el-dialog title="修改" v-model="isShowDialog">
<el-form label-width="100px" label-position="right">
<el-form-item label="渠道:">
<el-select v-model="tableData.param.channel" class="m-2">
<el-option v-for="item in channels" :key="item.id+''" :label="item.label" :value="item.value+''"/>
</el-select>
</el-form-item>
<el-form-item label="版本号:">
<el-input v-model="tableData.param.version" class="m-2"></el-input>
</el-form-item>
<el-form-item label="审核模式:">
<el-radio-group v-model="tableData.param.auditMode">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default"> </el-button>
<el-button size="default" type="primary" class="ml10" @click="addVersion">
<el-icon>
<ele-Promotion/>
</el-icon>
发送
</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script lang="ts">
import {reactive, toRefs, defineComponent} from 'vue';
import {allChannelList} from "/src/utils/game";
import {ElMessage, ElMessageBox} from "element-plus";
import {gameSetAuditMode} from "/@/api/game/set";
interface TableData {
channel: string,
version: string,
auditMode: number
}
interface TableDataState {
channels: Array<{ label: string, value: string }>
isShowDialog: boolean,
tableData: {
param: TableData;
};
}
export default defineComponent({
name: 'gameEditClientBug',
setup(prop, {emit}) {
const state = reactive<TableDataState>({
channels: [],
isShowDialog: false,
tableData: {
param: {
channel: "",
version: "",
auditMode: "1",
}
}
});
//
const openDialog = (row: TableData) => {
console.log(row);
allChannelList().then(value => {
state.channels = value;
state.tableData.param = row;
state.isShowDialog = true;
})
};
//
const closeDialog = () => {
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
//
const addVersion = () => {
closeDialog();
ElMessageBox.confirm(`此操作将修改审核模式,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
gameSetAuditMode(state.tableData.param).then(() => {
ElMessage.success('修改成功');
emit('mailList');
})
}).catch(() => {
});
};
return {
openDialog,
closeDialog,
onCancel,
addVersion,
...toRefs(state),
};
},
});
</script>

148
src/views/gameCdKey/list/editConfig.vue

@ -8,20 +8,82 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="有效时间" prop="dates"> <el-form-item label="有效时间" prop="dates">
<el-date-picker style="width: 400px" range-separator="-" type="datetimerange" v-model="queryParams.dates" <el-date-picker
start-placeholder="开始" end-placeholder="结束" value-format="YYYY-MM-DD HH:mm:ss"/> style="width: 400px"
range-separator="-"
type="datetimerange"
v-model="queryParams.dates"
start-placeholder="开始"
end-placeholder="结束"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item> </el-form-item>
<el-form-item label="兑换次数" prop="times" label-width="100px"> <el-form-item label="兑换次数" prop="times" label-width="100px">
<div class="flex-warp"> <div class="flex-warp">
<el-input-number v-model="queryParams.times" placeholder="请输入兑换次数" size="large" <el-input-number
controls-position="right" :min="1" style="width: 220px"/> v-model="queryParams.times"
placeholder="请输入兑换次数"
size="large"
controls-position="right"
:min="1"
style="width: 220px"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="奖励内容" />
<el-table :data="queryParams.awards" :inline="true" :cell-style="{ padding: '2' }" table-layout="fixed">
<el-table-column width="30">
<template #default="scope">
<div class="flex-warp">
<el-button size="small" type="text" @click="delItem(scope.$index)">
<el-icon>
<ele-Minus />
</el-icon>
</el-button>
</div>
</template>
</el-table-column>
<el-table-column width="60" label="序号">
<template #default="scope">
<div class="flex-warp">{{ scope.$index + 1 }}</div>
</template>
</el-table-column>
<el-table-column label="物品">
<template #default="scope">
<div class="flex-warp">
<el-select v-model="scope.row.itemId" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id + ' ' + item.DetailsPageName" :value="item.Id" />
</el-select>
</div>
</template>
</el-table-column>
<el-table-column label="数量">
<template #default="scope">
<div class="flex-warp">
<el-input-number
v-model="scope.row.num"
placeholder="请输入数量"
style="width: 220px"
:min="1"
onkeyup="this.value=this.value.replace(/\D/g,'');"
controls-position="right"
onafterpaste="this.value=this.value.replace(/\D/g,'')"
/>
</div>
</template>
</el-table-column>
</el-table>
<el-button size="default" type="primary" style="margin: 10px 0" @click="addItem()">
<el-icon>
<ele-Plus />
</el-icon>
添加奖励
</el-button>
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="onCancel" size="default"> </el-button> <el-button @click="onCancel" size="default"> </el-button>
<el-button size="default" type="primary" class="ml10" @click="addItem"> <el-button size="default" type="primary" class="ml10" @click="update">
<el-icon> <el-icon>
<ele-EditPen /> <ele-EditPen />
</el-icon> </el-icon>
@ -35,14 +97,16 @@
<script lang="ts"> <script lang="ts">
import { reactive, toRefs, defineComponent } from 'vue'; import { reactive, toRefs, defineComponent } from 'vue';
import {ElLoading} from "element-plus"; import { ElLoading, ElMessage } from 'element-plus';
import {updateGiftExchange} from "/@/api/game"; import { updateGiftExchange } from '/@/api/game';
import {allChannelList} from "/@/utils/game"; import { allChannelList } from '/@/utils/game';
import AllItemConfigCategory from '/@/api/config/AllItemConfigCategory.json';
interface TableDataState { interface TableDataState {
isShowDialog: boolean, isShowDialog: boolean;
queryParams: object; queryParams: object;
channels: object[]; channels: object[];
ItemConfig: object[];
} }
export default defineComponent({ export default defineComponent({
@ -52,15 +116,17 @@ export default defineComponent({
isShowDialog: false, isShowDialog: false,
queryParams: {}, queryParams: {},
channels: [], channels: [],
ItemConfig: AllItemConfigCategory,
}); });
// //
const openDialog = (row: any | null) => { const openDialog = (row: any | null) => {
state.isShowDialog = true; state.isShowDialog = true;
state.queryParams = row || {}; state.queryParams = row || {};
allChannelList().then(res => { state.queryParams.awards = state.queryParams.rewards;
allChannelList().then((res) => {
state.channels = res; state.channels = res;
}) });
}; };
// //
@ -72,33 +138,71 @@ export default defineComponent({
closeDialog(); closeDialog();
}; };
// //
const addItem = () => { const update = () => {
const loading = ElLoading.service({ const loading = ElLoading.service({
lock: true, lock: true,
text: 'Loading', text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)', background: 'rgba(0, 0, 0, 0.7)',
}); });
let data = {} let data = {};
data["startTime"] = state.queryParams.dates[0] let msg = stateAward();
data["stopTime"] = state.queryParams.dates[1] if (msg) {
data["configId"] = state.queryParams.id ElMessage.error(msg);
data["channel"] = state.queryParams.channel loading.close();
data["times"] = state.queryParams.times return;
}
data['startTime'] = state.queryParams.dates[0];
data['stopTime'] = state.queryParams.dates[1];
data['configId'] = state.queryParams.id;
data['channel'] = state.queryParams.channel;
data['times'] = state.queryParams.times;
data['awards'] = state.queryParams.awards;
console.log(state.queryParams, data); console.log(state.queryParams, data);
updateGiftExchange(data).then((res) => { updateGiftExchange(data)
.then((res) => {
console.log(res); console.log(res);
}).finally(function () { })
.finally(function () {
loading.close(); loading.close();
emit('countList') emit('countList');
closeDialog(); closeDialog();
}); });
};
let stateAward = () => {
console.log(state.queryParams);
if (state.queryParams.awards.length == 0 || !state.queryParams.awards) {
console.log('1', state.queryParams);
return '奖励配置未填写';
}
for (let i in state.queryParams.awards) {
state.queryParams.awards[i].itemId = Number(state.queryParams.awards[i].itemId);
state.queryParams.awards[i].num = Number(state.queryParams.awards[i].num);
if (!state.queryParams.awards[i].itemId || !state.queryParams.awards[i].num) {
console.log('4', state.queryParams.awards[i]);
return '奖励配置未填写';
}
}
// state.queryParams.rewards = JSON.stringify(state.queryParams.awards);
return '';
};
const delItem = (index: number) => {
console.log('delItem: ', index);
state.queryParams.awards.splice(index, 1);
};
const addItem = () => {
let item = {};
if (!state.queryParams.awards) {
state.queryParams.awards = [];
}
state.queryParams.awards.push(item);
}; };
return { return {
openDialog, openDialog,
closeDialog, closeDialog,
onCancel, onCancel,
update,
addItem, addItem,
delItem,
...toRefs(state), ...toRefs(state),
}; };
}, },

2
src/views/gameCdKey/list/index.vue

@ -46,6 +46,8 @@
</el-form> </el-form>
</div> </div>
<el-table :data="tableData.data" border style="width: 100%"> <el-table :data="tableData.data" border style="width: 100%">
<el-table-column prop="id" label="ID" show-overflow-tooltip width="50px">
</el-table-column>
<el-table-column prop="type" label="类型" show-overflow-tooltip width="80px"> <el-table-column prop="type" label="类型" show-overflow-tooltip width="80px">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.type==1">一码多用</div> <div v-if="scope.row.type==1">一码多用</div>

2
src/views/gameCdKey/setKey/index.vue

@ -72,7 +72,7 @@
<template #default="scope"> <template #default="scope">
<div class="flex-warp"> <div class="flex-warp">
<el-select v-model="scope.row.itemId" filterable placeholder="请选择物品"> <el-select v-model="scope.row.itemId" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" :value="item.Id"/> <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName" :value="item.Id"/>
</el-select> </el-select>
</div> </div>
<span v-show="check&&!scope.row.itemId" style="color: red">*</span> <span v-show="check&&!scope.row.itemId" style="color: red">*</span>

5
src/views/gameLoginUrl/list/index.vue

@ -17,6 +17,11 @@
重载配置 重载配置
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item>
<el-button type="success" class="ml10" @click="countList">
刷新列表
</el-button>
</el-form-item>
<el-table :data="tableData.data" style="width: 100%" stripe border> <el-table :data="tableData.data" style="width: 100%" stripe border>
<el-table-column prop="id" label="ID" width="60"> <el-table-column prop="id" label="ID" width="60">
<template #default="scope"> <template #default="scope">

3
src/views/gameLoginUrl/serverList/index.vue

@ -5,9 +5,10 @@
<el-form class="flex-warp" label-position="right"> <el-form class="flex-warp" label-position="right">
<el-form-item> <el-form-item>
<el-button type="success" class="ml10" @click="countList"> <el-button type="success" class="ml10" @click="countList">
加载配置 刷新列表
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-table :data="tableData.data" style="width: 100%" stripe border> <el-table :data="tableData.data" style="width: 100%" stripe border>
<el-table-column prop="id" label="ID" width="60"/> <el-table-column prop="id" label="ID" width="60"/>
<el-table-column prop="remark" label="备注" width="180"/> <el-table-column prop="remark" label="备注" width="180"/>

2
src/views/gameMail/mailList/index.vue

@ -58,7 +58,7 @@
<el-table-column prop="drops" label="附件" show-overflow-tooltip width="100"> <el-table-column prop="drops" label="附件" show-overflow-tooltip width="100">
<template #default="scope"> <template #default="scope">
<span type="text" v-for="item in scope.row.drops" :key="item.id"> <span type="text" v-for="item in scope.row.drops" :key="item.id">
{{ ItemConfig.find(i => i.Id == item.id).Name }}--{{ item.num }}; {{ ItemConfig.find(i => i.Id == item.id).DetailsPageName }}--{{ item.num }};
</span> </span>
</template> </template>
</el-table-column> </el-table-column>

2
src/views/gameMail/send/component/editConfig.vue

@ -23,7 +23,7 @@
<el-form-item label="附件:"> <el-form-item label="附件:">
<div v-if="tableData.param.type===1"> <div v-if="tableData.param.type===1">
<div v-for="item in tableData.param.drops" :key="item.id+''"> <div v-for="item in tableData.param.drops" :key="item.id+''">
<div>{{ ItemConfig.find(i => i.Id == item.id).Name }}数量{{ item.num }}</div> <div>{{ ItemConfig.find(i => i.Id == item.id).DetailsPageName }}数量{{ item.num }}</div>
</div> </div>
</div> </div>
<div v-else>无附件</div> <div v-else>无附件</div>

6
src/views/gameMail/send/index.vue

@ -106,7 +106,7 @@
<template #default="scope"> <template #default="scope">
<div class="flex-warp"> <div class="flex-warp">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品"> <el-select v-model="scope.row.id" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</div> </div>
@ -216,7 +216,7 @@
<template #default="scope"> <template #default="scope">
<div class="flex-warp"> <div class="flex-warp">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品"> <el-select v-model="scope.row.id" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</div> </div>
@ -254,7 +254,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import {reactive, toRefs, defineComponent, ref, unref, onMounted} from 'vue'; import {reactive, toRefs, defineComponent, ref, onMounted} from 'vue';
import {gameMailSend, gameGetModel, gameUpdateModel} from '/@/api/game'; import {gameMailSend, gameGetModel, gameUpdateModel} from '/@/api/game';
import EditConfig from '/@/views/gameMail/send/component/editConfig.vue'; import EditConfig from '/@/views/gameMail/send/component/editConfig.vue';
import {ServerCategorize, serverList} from "/@/utils/game"; import {ServerCategorize, serverList} from "/@/utils/game";

24
src/views/gameManage/copyUnit/index.vue

@ -16,7 +16,7 @@
</template> </template>
<div v-show="item.copyShow"> <div v-show="item.copyShow">
<div class="game-order-search mb15"> <div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px"> <el-form label-position="right" label-width="300px" style="max-width: 600px">
<el-form-item label="原账号"> <el-form-item label="原账号">
<el-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable /> <el-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item> </el-form-item>
@ -69,7 +69,7 @@
</template> </template>
<div v-show="item.copyShow"> <div v-show="item.copyShow">
<div class="game-order-search mb15"> <div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px"> <el-form label-position="right" label-width="300px" style="max-width: 600px">
<el-upload <el-upload
class="upload-demo" class="upload-demo"
:action="baseURL + 'api/v1/pub/upload/singleFile'" :action="baseURL + 'api/v1/pub/upload/singleFile'"
@ -86,13 +86,13 @@
<div slot="tip" class="el-upload__tip">只能上传Json文件</div> <div slot="tip" class="el-upload__tip">只能上传Json文件</div>
</el-upload> </el-upload>
<el-form-item label="文件名称"> <el-form-item label="文件名称">
<el-select v-model="tableData.data.filename" class="m-2" placeholder="选择载入文件" filterable> <el-select v-model="tableData.data.filename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> <el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" />
</el-select> </el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>--> <!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item> </el-form-item>
<el-form-item label="仓库文件名称"> <el-form-item label="仓库文件名称">
<el-select v-model="tableData.data.storeFilename" class="m-2" placeholder="选择载入文件" filterable> <el-select v-model="tableData.data.storeFilename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable>
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> <el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" />
</el-select> </el-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>--> <!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
@ -136,7 +136,7 @@
</template> </template>
<div v-show="item.delShow"> <div v-show="item.delShow">
<div class="game-order-search mb15"> <div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px"> <el-form label-position="right" label-width="300px" style="max-width: 600px">
<el-form-item label="账号"> <el-form-item label="账号">
<el-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable /> <el-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable />
</el-form-item> </el-form-item>
@ -170,7 +170,7 @@
</el-button> </el-button>
</template> </template>
<div class="game-order-search mb15" v-show="item.pwdShow"> <div class="game-order-search mb15" v-show="item.pwdShow">
<el-form label-position="right" label-width="300px" style="max-width: 520px"> <el-form label-position="right" label-width="300px" style="max-width: 600px">
<el-form-item label="account:"> <el-form-item label="account:">
<el-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large" clearable /> <el-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item> </el-form-item>
@ -230,14 +230,7 @@
<script lang="ts"> <script lang="ts">
import { toRefs, reactive, onMounted, defineComponent, warn } from 'vue'; import { toRefs, reactive, onMounted, defineComponent, warn } from 'vue';
import { import { gameGMClearResource, gameGMCopyUnit, gameGMUpdateUnit, gameGMDelAccount, gameResetPwd, giftExchangeExists } from '/@/api/game';
gameGMClearResource,
gameGMCopyUnit,
gameGMUpdateUnit,
gameGMDelAccount,
gameResetPwd,
giftExchangeExists,
} from '/@/api/game';
import { AllServerList, ServerCategorize, serverList } from '/@/utils/game'; import { AllServerList, ServerCategorize, serverList } from '/@/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus/es'; import { ElMessage, ElMessageBox } from 'element-plus/es';
import { gSwitchServer } from '/@/utils/utils'; import { gSwitchServer } from '/@/utils/utils';
@ -352,7 +345,8 @@ export default defineComponent({
gameGMCopyUnit({ gameGMCopyUnit({
SrcName: state.tableData.data.SrcName, SrcName: state.tableData.data.SrcName,
SrcServer: state.tableData.data.SrcServer, SrcServer: state.tableData.data.SrcServer,
}).then((res) => { })
.then((res) => {
ElMessage.success('修改成功'); ElMessage.success('修改成功');
console.log('copy: ', res); console.log('copy: ', res);
state.tableData.data.filename = res.data.filename; state.tableData.data.filename = res.data.filename;

169
src/views/gameManage/gm/index.vue

@ -2,24 +2,23 @@
<div class="game-order-container"> <div class="game-order-container">
<el-card shadow="hover" header="设置账号黑名单"> <el-card shadow="hover" header="设置账号黑名单">
<div class="game-order-search mb15"> <div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 520px"> <el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 600px">
<el-form-item label="查找方式"> <el-form-item label="查找方式">
<el-select v-model="tableData.data.type" class="w-50 m-2" placeholder="选择渠道" size="large"> <el-select v-model="tableData.data.type" class="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-option label="uid查询" :value="1" /> <el-option label="uid查询" :value="1" />
<el-option label="账号查询" :value="2" /> <el-option label="账号查询" :value="2" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="区服" v-if="tableData.data.type==2"> <el-form-item label="区服">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> <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-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<el-select v-model="tableData.data.serverId" class="w-50 m-2" placeholder="选择区服" size="large" <el-select v-model="tableData.data.serverId" class="w-50 m-2" placeholder="选择区服" size="large" filterable>
filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="渠道" v-if="tableData.data.type == 2"> <el-form-item label="渠道" v-if="tableData.data.type == 2">
<el-select v-model="tableData.data.channel" class="w-50 m-2" placeholder="选择渠道" size="large"> <el-select v-model="tableData.data.channel" class="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" /> <el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -30,81 +29,78 @@
<el-input v-model="tableData.data.uid" placeholder="" class="w-50 m-2" size="large" clearable /> <el-input v-model="tableData.data.uid" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item> </el-form-item>
<el-form-item label="黑名单开关"> <el-form-item label="黑名单开关">
<el-select v-model="tableData.data.gmState" class="w-50 m-2" placeholder="选择渠道" size="large"> <el-select v-model="tableData.data.gmState" class="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-option v-for="item in gmStates" :key="item.value" :label="item.label" <el-option v-for="item in gmStates" :key="item.value" :label="item.label" :value="item.value" />
:value="item.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="large" type="primary" class="ml10" @click="gmSearch"> <el-button size="large" type="primary" class="ml10" @click="gmSearch"> 查询</el-button>
查询 <el-button size="large" type="primary" class="ml10" @click="gmChange"> 修改</el-button>
</el-button>
<el-button size="large" type="primary" class="ml10" @click="gmChange">
修改
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</el-card> </el-card>
<el-card shadow="hover" header="开游戏里的GM"> <el-card shadow="hover" header="开游戏里的GM">
<div class="game-order-search mb15"> <div class="game-order-search mb15">
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 520px"> <el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 600px">
<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="tableData.querys.serverId" class="w-50 m-2" placeholder="选择区服" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="uid"> <el-form-item label="uid">
<el-input v-model="tableData.querys.uids" placeholder="可多个用“;”隔开" class="w-50 m-2" size="large" <el-input v-model="tableData.querys.uids" placeholder="填写uid" class="w-50 m-2" size="large" clearable />
clearable/>
</el-form-item> </el-form-item>
<el-form-item label="gm开关"> <el-form-item label="gm开关">
<el-select v-model="tableData.querys.state" class="w-50 m-2" placeholder="选择渠道" size="large"> <el-select v-model="tableData.querys.state" class="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-option label="取消" :value="0" /> <el-option label="取消" :value="0" />
<el-option label="开启" :value="1" /> <el-option label="开启" :value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="large" type="primary" class="ml10" @click="setclientgm"> <el-button size="large" type="primary" class="ml10" @click="setclientgm"> 修改</el-button>
修改
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
</el-card> </el-card>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import {gameChangeGm, gameGmSearch, gameListGm, gameSetclientgm} from "/@/api/game"; import { gameChangeGm, gameGmSearch, gameListGm, gameSetclientgm } from '/@/api/game';
import {channelList, ServerCategorize, serverList} from "/@/utils/game"; import { channelList, ServerCategorize, serverList } from '/@/utils/game';
import {gSwitchServer} from "/@/utils/utils"; import { gSwitchServer } from '/@/utils/utils';
import {ElMessage} from "element-plus/es"; import { ElMessage } from 'element-plus/es';
interface TableData { interface TableData {
type: number type: number;
uid: string uid: string;
channel: string channel: string;
serverId: string serverId: string;
account: string account: string;
gmState: number gmState: number;
} }
interface TableDataState { interface TableDataState {
queryParams: { queryParams: {
pageNum: number pageNum: number;
pageSize: number pageSize: number;
serverId: string serverId: string;
gmState: number gmState: number;
total: number total: number;
}; };
tableData: { tableData: {
querys: { querys: {
uids: string, serverId: string;
state: number, uids: string;
}, state: number;
data: TableData };
list: object[] data: TableData;
list: object[];
}; };
servers: object; servers: object;
channels: object; channels: object;
@ -121,25 +117,26 @@ export default defineComponent({
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
serverId: "", serverId: '',
gmState: 1, gmState: 1,
total: 0, total: 0,
}, },
tableData: { tableData: {
querys: { querys: {
uids: "", serverId: '',
uids: '',
state: 1, state: 1,
}, },
data: { data: {
type: 1, type: 1,
channel: "", channel: '',
serverId: "", serverId: '',
account: "", account: '',
uid: "", uid: '',
gmState: 0 gmState: 0,
}, },
list: [] list: [],
}, },
channels: [], channels: [],
servers: [], servers: [],
@ -152,64 +149,72 @@ export default defineComponent({
value: 1, value: 1,
label: '黑名单', label: '黑名单',
}, },
{
value: 2,
label: 'GM',
},
], ],
serverCategorize: ServerCategorize, serverCategorize: ServerCategorize,
}); });
const gmSearch = () => { const gmSearch = () => {
let query = { type: state.tableData.data.type, uid: state.tableData.data.uid }; let query = { type: state.tableData.data.type, uid: state.tableData.data.uid };
if (state.tableData.data.type == 2) { if (state.tableData.data.type == 2) {
query["account"] = state.tableData.data.channel + state.tableData.data.account; query['account'] = state.tableData.data.channel + state.tableData.data.account;
query["serverId"] = state.tableData.data.serverId; query['serverId'] = state.tableData.data.serverId;
} }
gameGmSearch(query).then((res) => { gameGmSearch(query)
.then((res) => {
ElMessage.success('查询成功'); ElMessage.success('查询成功');
console.log(res); console.log(res);
state.tableData.data.gmState = res.data.gm state.tableData.data.gmState = res.data.gm;
}).finally(() => {
// state.loading = false;
}) })
} .finally(() => {
// state.loading = false;
});
};
const gmChange = () => { const gmChange = () => {
let query = { let query = {
type: state.tableData.data.type, type: state.tableData.data.type,
uid: state.tableData.data.uid, uid: state.tableData.data.uid,
gmState: state.tableData.data.gmState gmState: state.tableData.data.gmState,
}; };
if (state.tableData.data.type == 2) { if (state.tableData.data.type == 2) {
query["account"] = state.tableData.data.channel + state.tableData.data.account; query['account'] = state.tableData.data.channel + state.tableData.data.account;
query["serverId"] = state.tableData.data.serverId; query['serverId'] = state.tableData.data.serverId;
} }
gameChangeGm(query).then(() => { gameChangeGm(query)
.then(() => {
ElMessage.success('修改成功'); ElMessage.success('修改成功');
}).finally(() => {
}) })
} .finally(() => {});
};
const setclientgm = () => { const setclientgm = () => {
gameSetclientgm(state.tableData.querys)
gameSetclientgm(state.tableData.querys).then(() => { .then(() => {
ElMessage.success('修改成功'); ElMessage.success('修改成功');
}).finally(() => {
}) })
} .finally(() => {});
};
const gmList = () => { const gmList = () => {
gameListGm(state.queryParams).then((res) => { gameListGm(state.queryParams)
state.tableData.list = res.data.uids .then((res) => {
state.tableData.list = res.data.uids;
ElMessage.success('获取成功'); ElMessage.success('获取成功');
}).finally(() => {
}) })
} .finally(() => {});
};
// //
onMounted(() => { onMounted(() => {
serverList().then(res => { serverList().then((res) => {
state.servers = res; state.servers = res;
}) });
channelList().then(res => { channelList().then((res) => {
state.channels = res state.channels = res;
}) });
}); });
// //
const switchServer = () => { const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers) return gSwitchServer(state.serverSwitch, state.servers);
}; };
return { return {
switchServer, switchServer,

144
src/views/gameManage/keep/index.vue

@ -72,150 +72,6 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column prop="two" label="2留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.two">-->
<!-- <span>{{ scope.row.two }}&#45;&#45;{{-->
<!-- (scope.row.two / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="three" label="3留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.three">-->
<!-- <span>{{ scope.row.three }}&#45;&#45;{{-->
<!-- (scope.row.three / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="four" label="4留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.four">-->
<!-- <span>{{ scope.row.four }}&#45;&#45;{{-->
<!-- (scope.row.four / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="five" label="5留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.five">-->
<!-- <span>{{ scope.row.five }}&#45;&#45;{{-->
<!-- (scope.row.five / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="six" label="6留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.six">-->
<!-- <span>{{ scope.row.six }}&#45;&#45;{{-->
<!-- (scope.row.six / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="seven" label="7留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.seven">-->
<!-- <span>{{ scope.row.seven }}&#45;&#45;{{-->
<!-- (scope.row.seven / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="eight" label="8留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.eight">-->
<!-- <span>{{ scope.row.eight }}&#45;&#45;{{-->
<!-- (scope.row.eight / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="nine" label="9留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.nine">-->
<!-- <span>{{ scope.row.nine }}&#45;&#45;{{-->
<!-- (scope.row.nine / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="ten" label="10留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.ten">-->
<!-- <span>{{ scope.row.ten }}&#45;&#45;{{-->
<!-- (scope.row.ten / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="ten" label="11留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.ten">-->
<!-- <span>{{ scope.row.ten }}&#45;&#45;{{-->
<!-- (scope.row.ten / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2)-->
<!-- }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="fifteen" label="15留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.fifteen">-->
<!-- <span>{{-->
<!-- scope.row.fifteen-->
<!-- }}&#45;&#45;{{ (scope.row.fifteen / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2) }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="thirty" label="30留" width="180">-->
<!-- <template #default="scope">-->
<!-- <div v-if="scope.row.thirty">-->
<!-- <span>{{-->
<!-- scope.row.thirty-->
<!-- }}&#45;&#45;{{ (scope.row.thirty / tableData.registerNums[scope.row.id ?? 0] * 100).toFixed(2) }}%</span>-->
<!-- </div>-->
<!-- <div v-else style="color: #e23657">-->
<!-- 0&#45;&#45;0%-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table> </el-table>
</div> </div>
</el-card> </el-card>

2
src/views/gameMarket/buyModel/index.vue

@ -99,7 +99,7 @@
<template #default="scope"> <template #default="scope">
<div class="flex-warp"> <div class="flex-warp">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品" style="width: 80%"> <el-select v-model="scope.row.id" filterable placeholder="请选择物品" style="width: 80%">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
<span v-show="check&&!scope.row.id" style="color: red">*</span> <span v-show="check&&!scope.row.id" style="color: red">*</span>

2
src/views/gameMarket/highPriceRecycleModel/index.vue

@ -41,7 +41,7 @@
</el-form-item> </el-form-item>
<el-form-item prop="ItemId" label="物品"> <el-form-item prop="ItemId" label="物品">
<el-select v-model="model.ItemId" filterable placeholder="选择物品"> <el-select v-model="model.ItemId" filterable placeholder="选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" :value="item.Id"/> <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName" :value="item.Id"/>
</el-select> </el-select>
<span v-show="check&&!model.ItemId" style="color: red">*</span> <span v-show="check&&!model.ItemId" style="color: red">*</span>
</el-form-item> </el-form-item>

6
src/views/gameMarket/sellModel/index.vue

@ -93,7 +93,7 @@
<el-table-column label="物品名称" width="150"> <el-table-column label="物品名称" width="150">
<template #default="scope"> <template #default="scope">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品" style="width: 90%"> <el-select v-model="scope.row.id" filterable placeholder="请选择物品" style="width: 90%">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
<span v-show="check&&!Number(scope.row.id)" style="color: red">*</span> <span v-show="check&&!Number(scope.row.id)" style="color: red">*</span>
@ -238,7 +238,7 @@
:cell-style="{padding:1+'px'}"> :cell-style="{padding:1+'px'}">
<el-table-column label="物品名称"> <el-table-column label="物品名称">
<template #default="scope"> <template #default="scope">
{{ItemConfig.find(r=>r.Id==scope.row.ItemId)?ItemConfig.find(r=>r.Id==scope.row.ItemId).Name:''}} {{ItemConfig.find(r=>r.Id==scope.row.ItemId)?ItemConfig.find(r=>r.Id==scope.row.ItemId).DetailsPageName:''}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="物品数量区间(min;max)" width="200"> <el-table-column label="物品数量区间(min;max)" width="200">
@ -376,7 +376,7 @@
<el-table-column label="物品名称" width="150"> <el-table-column label="物品名称" width="150">
<template #default="scope"> <template #default="scope">
<el-select v-model="scope.row.id" filterable placeholder="请选择物品"> <el-select v-model="scope.row.id" filterable placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id +' '+ item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</template> </template>

4
src/views/gameMarket/update/index.vue

@ -249,7 +249,7 @@
<el-table-column prop="ItemId" label="物品"> <el-table-column prop="ItemId" label="物品">
<template #default="scope"> <template #default="scope">
<el-select v-model="scope.row.Id" class="m-2" filterable placeholder="选择物品"> <el-select v-model="scope.row.Id" class="m-2" filterable placeholder="选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" :value="item.Id"/> <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName" :value="item.Id"/>
</el-select> </el-select>
<span v-show="check&&!scope.row.Id" style="color: red">*</span> <span v-show="check&&!scope.row.Id" style="color: red">*</span>
</template> </template>
@ -970,7 +970,7 @@
return state.HighPriceRecycle.IntroduceItem = ""; return state.HighPriceRecycle.IntroduceItem = "";
} }
state.HighPriceRecycle.IntroduceItem = `物品:` + (AllItemConfigCategory.find(r => r.Id == stall.ItemId) ? AllItemConfigCategory.find(r => r.Id == stall.ItemId).Name:stall.ItemId) + state.HighPriceRecycle.IntroduceItem = `物品:` + (AllItemConfigCategory.find(r => r.Id == stall.ItemId) ? AllItemConfigCategory.find(r => r.Id == stall.ItemId).DetailsPageName:stall.ItemId) +
`;货币:` + (state.currencyType.find(r => r.Id == stall.CurrencyType) ? state.currencyType.find(r => r.Id == stall.CurrencyType).Name:stall.CurrencyType) + `;货币:` + (state.currencyType.find(r => r.Id == stall.CurrencyType) ? state.currencyType.find(r => r.Id == stall.CurrencyType).Name:stall.CurrencyType) +
`;价格:` + (stall.Prices && stall.Prices[0]) + `-` + (stall.Prices && stall.Prices[1]) + `;价格:` + (stall.Prices && stall.Prices[0]) + `-` + (stall.Prices && stall.Prices[1]) +
`元;数量:` + stall.ItemNum + `元;数量:` + stall.ItemNum +

16
src/views/gameMonthly/lottery/index.vue

@ -184,7 +184,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.first.one.id" filterable <el-select size="default" class="left-block" v-model="monthly.first.one.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -202,7 +202,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.first.two.id" filterable <el-select size="default" class="left-block" v-model="monthly.first.two.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -220,7 +220,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.first.three.id" filterable <el-select size="default" class="left-block" v-model="monthly.first.three.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -256,7 +256,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.first.five.id" filterable <el-select size="default" class="left-block" v-model="monthly.first.five.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -274,7 +274,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.first.six.id" filterable <el-select size="default" class="left-block" v-model="monthly.first.six.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -297,7 +297,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.second.one.id" filterable <el-select size="default" class="left-block" v-model="monthly.second.one.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -315,7 +315,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.second.two.id" filterable <el-select size="default" class="left-block" v-model="monthly.second.two.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -333,7 +333,7 @@
</template> </template>
<el-select size="default" class="left-block" v-model="monthly.second.three.id" filterable <el-select size="default" class="left-block" v-model="monthly.second.three.id" filterable
placeholder="请选择物品"> placeholder="请选择物品">
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.Name" <el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName"
:value="item.Id"/> :value="item.Id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>

622
src/views/gameNotice/customerService/index.vue

@ -0,0 +1,622 @@
<template>
<div class="game-maintenance-container">
<el-card shadow="hover" header="客服页面">
<div class="game-order-search mb15">
<el-form label-width="70px" label-position="right">
<el-form-item label="渠道" prop="channel">
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道">
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="页面模板" prop="model">
<el-select v-model="model" @change="useModel(1)" placeholder="请选择模板">
<el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id"></el-option>
</el-select>
<el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="inputBig" style="margin-bottom: -15px">
<span style="font-weight: bold">B</span>
</el-button>
<el-button size="small" @click="inputItalic" style="margin-bottom: -15px">
<span style="font-style: italic">I</span>
</el-button>
<el-button size="small" @click="inputUnderline" style="margin-bottom: -15px">
<span style="text-decoration: underline">U</span>
</el-button>
<el-button size="small" @click="inputLink" style="margin-bottom: -15px; padding: 0; padding-left: 5px">
<el-icon type="text">
<ele-Link />
</el-icon>
</el-button>
<el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0">
<el-color-picker size="default" v-model="color" @change="inputColor"></el-color-picker>
</el-button>
<el-form-item style="margin-bottom: -15px; margin-left: 20px">
<el-button type="primary" @click="showContent" style="margin-left: 20px">内容预览</el-button>
</el-form-item>
</el-form-item>
<el-form-item label="页面内容">
<el-input v-model="tableData.param.content" type="textarea" rows="25" @mouseup="inputSelect" @blur="inputSelect" clearable />
</el-form-item>
<el-form-item>
<el-button size="large" type="primary" class="ml10" @click="noticeLogin"> 客服页面发送</el-button>
</el-form-item>
</el-form>
</div>
</el-card>
<el-dialog v-model="listModelVisible" :before-close="handleClose" :close-on-click-modal="false" center>
<div class="my-header">
<el-button type="" @click="saveModel(2)">保存</el-button>
<el-button type="primary" @click="setModel(1)">添加</el-button>
</div>
<el-table :data="dbs" :inline="true" :cell-style="{ padding: '0' }">
<el-table-column>
<template #default="scope">
<div class="flex-warp">
{{ scope.row.title }}
</div>
</template>
</el-table-column>
<el-table-column width="150">
<template #default="scope">
<el-button size="small" type="danger" @click="setModel(3, scope.row.id)" inline="true"></el-button>
<el-button size="small" type="primary" @click="setModel(2, scope.row.id)" inline="true"></el-button>
</template>
</el-table-column>
</el-table>
</el-dialog>
<el-dialog v-model="editModelVisible" :close-on-click-modal="false" center>
<el-form label-width="90px">
<el-form-item label="模板名称" prop="title">
<el-input v-model="editModel.title" placeholder="请输入模板名称" />
</el-form-item>
<el-form-item label="模板内容" prop="content">
<el-input v-model="editModel.content" type="textarea" placeholder="请输入内容" rows="25" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="saveModel(1)"> 保存</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="editCronVisible" :close-on-click-modal="false" center>
<el-form label-width="90px">
<el-form-item label="页面模板" prop="model">
<el-select v-model="model" @change="useModel(2)" placeholder="请选择模板">
<el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id"></el-option>
</el-select>
<el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="inputBig(2)" style="margin-bottom: -15px">
<span style="font-weight: bold">B</span>
</el-button>
<el-button size="small" @click="inputItalic(2)" style="margin-bottom: -15px">
<span style="font-style: italic">I</span>
</el-button>
<el-button size="small" @click="inputUnderline(2)" style="margin-bottom: -15px">
<span style="text-decoration: underline">U</span>
</el-button>
<el-button size="small" @click="inputLink(2)" style="margin-bottom: -15px; padding: 0; padding-left: 5px">
<el-icon type="text">
<ele-Link />
</el-icon>
</el-button>
<el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0">
<el-color-picker size="default" v-model="color" @change="inputColor(2)"></el-color-picker>
</el-button>
</el-form-item>
<el-form-item label="页面内容">
<el-input v-model="cron.content" type="textarea" rows="25" @mouseup="inputSelect" @blur="inputSelect" clearable />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="saveCron"> 保存修改</el-button>
</div>
</template>
</el-dialog>
<el-dialog v-model="contentVisible" :close-on-click-modal="false" center>
<p v-html="tableData.content"></p>
</el-dialog>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import {
gameGetNotice,
gameGMNoticeModelAdd,
gameGMNoticeModelDel,
gameGMNoticeModelGet,
gameNotice,
gameGMNoticeGetCron,
gameNoticeDel,
} from '/@/api/game';
import { ElMessage, ElMessageBox } from 'element-plus/es';
import { allChannelList } from '/@/utils/game';
import { contentReplace, zeroFill } from '/@/utils/utils';
interface Data {
title: string;
send: number;
sendTime: number;
channel: string;
content: string;
noticeType: number;
id: number;
noticeId: number;
}
interface TableDataState {
unselsected: string[];
colorPicker: boolean;
color: string;
selected: string;
urlLink: string;
dbs: Array<Data>;
model: number;
editModel: Data;
tableData: {
content: string;
crons: Array<Data>;
param: Data;
};
editModelVisible: boolean;
listModelVisible: boolean;
listCronVisible: boolean;
editCronVisible: boolean;
contentVisible: boolean;
cron: Data;
channels: object;
noticeTypes: object[];
}
export default defineComponent({
name: 'apiV1GameNoticeCustomerService',
setup() {
// const {proxy} = getCurrentInstance() as any;
const state = reactive<TableDataState>({
unselsected: ['', ''],
colorPicker: false,
editModelVisible: false,
listModelVisible: false,
listCronVisible: false,
editCronVisible: false,
contentVisible: false,
cron: {
title: '',
send: 1,
sendTime: Date.now(),
content: '',
noticeType: 4,
channel: '',
id: 0,
noticeId: 0,
},
color: '#000000',
selected: '替换显示内容',
urlLink: '',
tableData: {
content: '',
crons: [],
param: {
title: '',
send: 1,
sendTime: Date.now(),
content: '',
noticeType: 4,
channel: '',
id: 0,
noticeId: 0,
},
},
dbs: [],
model: '',
editModel: {},
channels: [],
noticeTypes: [
{ Name: '所有公告', Id: 0 },
{ Name: '弹窗公告', Id: 1 },
{ Name: '登录公告', Id: 2 },
{
Name: '维护公告',
Id: 3,
},
{ Name: '客服页面', Id: 4 },
],
});
const noticeLogin = () => {
if (state.tableData.param.send == 1) {
state.tableData.param.sendTime = 0;
}
console.log('Notice: ', state.tableData.param);
gameNotice(state.tableData.param)
.then(() => {
ElMessage.success('发送成功');
})
.finally(() => {
// state.loading = false;
});
};
const saveCron = () => {
if (state.cron.send == 1) {
state.cron.sendTime = 0;
}
console.log('Notice: ', state.cron);
gameNotice(state.cron)
.then(() => {
ElMessage.success('发送成功');
})
.finally(() => {
// state.loading = false;
});
};
const noticeLog = () => {
gameGMNoticeGetCron({})
.then((res) => {
console.log('Notice: ', res);
state.tableData.crons = res.data.noticeLogs;
state.listCronVisible = true;
})
.finally(() => {
// state.loading = false;
});
};
//
const initTableData = () => {
getNotice();
};
const getNotice = () => {
gameGetNotice(state.tableData.param).then((res: any) => {
state.tableData.param.content = res.data.content;
state.tableData.param.noticeId = res.data.id;
});
};
//
onMounted(() => {
allChannelList().then((res) => {
state.channels = res;
});
initTableData();
getModel();
console.log('onMounted', document.getElementsByClassName('w-e-droplist'));
if (document.getElementsByClassName('w-e-droplist')[0]) {
document.getElementsByClassName('w-e-droplist')[0].style['width'] = '260px';
}
});
var getDate = (time: string) => {
let date = new Date(time);
return (
date.getFullYear() +
'-' +
zeroFill(date.getMonth() + 1) +
'-' +
zeroFill(date.getDate()) +
' ' +
zeroFill(date.getHours()) +
':' +
zeroFill(date.getMinutes()) +
':' +
zeroFill(date.getSeconds())
);
};
var inputSelect = (res: any) => {
console.log(res, res.target.selectionStart, res.target.selectionEnd);
let selectionStart = res.target.selectionStart;
let selectionEnd = res.target.selectionEnd;
state.unselsected = [res.target.value.slice(0, selectionStart), res.target.value.slice(selectionEnd)];
if (selectionStart == selectionEnd) {
// console.log("same");
state.selected = '替换显示内容';
return;
}
state.selected = res.target.value.slice(selectionStart, selectionEnd);
console.log(state.selected);
};
var changeContent = (type: number) => {
switch (type) {
case 2:
state.cron.content = state.unselsected[0] + state.selected + state.unselsected[1];
break;
default:
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1];
break;
}
};
var inputBig = (type: number) => {
if (state.unselsected[1].indexOf('[/b]') == 0) {
return;
}
if (state.selected.indexOf('[b]') > -1) {
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, '');
changeContent(type);
return;
}
state.selected = '[b]' + state.selected + '[/b]';
changeContent(type);
// console.log(state.unselsected, state.selected.indexOf("[b]"), state.selected, state.tableData.param.content);
};
var inputItalic = (type: number) => {
if (state.unselsected[1].indexOf('[/i]') == 0) {
return;
}
if (state.selected.indexOf('[i]') > -1 || (state.unselsected[1].indexOf('[i]') == 0 && state.unselsected[1].indexOf('[/i]') > -1)) {
state.selected = state.selected.replace(/\[i]|\[\/i]/gi, '');
changeContent(type);
return;
}
state.selected = '[i]' + state.selected + '[/i]';
changeContent(type);
// console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputUnderline = (type: number) => {
if (state.unselsected[1].indexOf('[/u]') == 0) {
return;
}
if (state.selected.indexOf('[u]') > -1) {
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, '');
changeContent(type);
return;
}
state.selected = '[u]' + state.selected + '[/u]';
changeContent(type);
// console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputLink = (type: number) => {
if (state.selected.indexOf('[/url]') > -1) {
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, '');
changeContent(type);
return;
}
ElMessageBox.prompt('请输入Url', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
// inputPattern:
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,
inputErrorMessage: 'Invalid http request',
}).then(({ value }) => {
state.urlLink = value;
if (state.unselsected[1].indexOf('[/url]') == 0) {
return;
}
state.selected = '[url=' + state.urlLink + ']' + state.selected + '[/url]';
changeContent(type);
state.urlLink = '';
// console.log(state.unselsected, state.selected, state.tableData.param.content);
});
};
var buttonColor = (type: number) => {
// if(state.selected.indexOf("[/color]") > -1){
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, "");
// changeContent();
// }
};
var inputColor = (type: number) => {
if (!state.color) {
if (state.selected.indexOf('[/color]') > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, '');
changeContent(type);
return;
}
return;
}
if (state.unselsected[1].indexOf('[/color]') == 0) {
return;
}
if (state.selected.indexOf('[/color]') > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, '');
// changeContent();
// return;
}
state.selected = '[color=' + state.color + ']' + state.selected + '[/color]';
changeContent(type);
// console.log(state.unselsected, state.selected, state.tableData.param.content);
};
//
const getModel = () => {
gameGMNoticeModelGet({ noticeType: 4 }).then((res) => {
if (res.data.noticeModel) {
state.dbs = res.data.noticeModel;
}
console.log(res, state.dbs);
});
};
const useModel = (id: number) => {
switch (id) {
case 1:
let model = state.dbs.find((r) => r.id == state.model);
if (model) {
state.tableData.param.content = model.content;
}
break;
case 2:
let model1 = state.dbs.find((r) => r.id == state.model);
if (model1) {
state.cron.content = model1.content;
}
break;
}
};
const makeModel = () => {
state.listModelVisible = true;
console.log(state);
};
const setModel = (type: number, id: number) => {
switch (type) {
case 1:
state.editModel = {};
state.editModelVisible = true;
break;
case 2:
state.editModel = state.dbs.find((model) => model.id == id);
if (!state.editModel) {
return;
}
state.editModelVisible = true;
break;
case 3:
gameGMNoticeModelDel({
id: id,
})
.then(function () {
getModel();
})
.finally(function () {});
break;
}
};
const saveModel = (type: number) => {
console.log(type, state.editModel);
switch (type) {
case 1:
gameGMNoticeModelAdd({
title: state.editModel.title,
content: state.editModel.content,
noticeType: 4,
id: state.editModel.id,
})
.then(function () {
getModel();
})
.finally(function () {
state.editModelVisible = false;
});
break;
case 2:
state.listModelVisible = false;
break;
}
};
const handleClose = (done: () => void) => {
// ElMessageBox.confirm('退').then(() => {
done();
// }).catch(() => {
// // catch error
// })
};
const setCron = (type: number, id: number) => {
switch (type) {
case 1: //
state.cron = state.tableData.crons.find((r) => r.id == id);
console.log(state.cron);
state.editCronVisible = true;
break;
case 2: //
ElMessageBox.confirm('是否确认删除本条待发送公告?,点击确认后删除本条待发送公告。').then(() => {
gameNoticeDel({ id: id })
.then(() => {
ElMessage.success('删除成功');
noticeLog();
})
.finally(() => {
// state.loading = false;
});
});
break;
}
};
const alertContent = (val) => {
console.log(`current page: ${val}`);
ElMessageBox.alert(val, '', { confirmButtonText: 'OK' });
};
const showContent = () => {
state.contentVisible = true;
state.tableData.content = contentReplace(state.tableData.param.content);
console.log(state.tableData.content);
};
return {
showContent,
getNotice,
noticeLog,
noticeLogin,
inputSelect,
inputBig,
inputItalic,
inputUnderline,
inputLink,
inputColor,
buttonColor,
getModel,
useModel,
makeModel,
setModel,
saveModel,
handleClose,
setCron,
getDate,
alertContent,
saveCron,
...toRefs(state),
};
},
});
</script>
<style scoped lang="scss" src="../../../theme/add.scss"></style>
<style scoped lang="scss">
.my-header {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 16px;
}
.tree-border {
margin-top: 5px;
border: 1px solid #e5e6e7 !important;
background: #fff none !important;
border-radius: 4px;
}
.system-edit-post-container {
.menu-data-tree {
border: var(--el-input-border, var(--el-border-base));
border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
padding: 5px;
}
}
.el-form-item {
display: -moz-flex;
vertical-align: middle;
margin-right: 32px;
}
::v-deep .el-table .cell {
height: 25px;
}
::v-deep .el-table--striped .el-table__body tr.el-table__row--striped td {
background: #ffffd5;
}
::v-deep .el-table .el-table--enable-row-hover .el-table__body tr:hover > td {
background: inherit;
}
::v-deep(.el-form-item--large .el-form-item__content) {
line-height: 20px;
}
::v-deep(.el-form-item__content) {
line-height: 20px;
}
::v-deep .w-e-droplist {
width: 260px !important;
}
</style>

222
src/views/gameNotice/pop/index.vue

@ -6,7 +6,7 @@
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> <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-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> <el-select v-model="tableData.param.servers" class="m-2" placeholder="选择服务器" size="large" multiple clearable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -14,24 +14,23 @@
<el-form label-width="90px"> <el-form label-width="90px">
<el-form-item label="类型:" style="width: 25%"> <el-form-item label="类型:" style="width: 25%">
<el-radio-group v-model="tableData.param.popType"> <el-radio-group v-model="tableData.param.popType">
<el-radio :label=1>普通弹窗</el-radio> <el-radio :label="1">普通弹窗</el-radio>
<el-radio :label=2>强制退到登录</el-radio> <el-radio :label="2">强制退到登录</el-radio>
<el-radio :label=3>强制退到公告</el-radio> <el-radio :label="3">强制退到公告</el-radio>
<el-radio :label=6>滚动公告</el-radio> <el-radio :label="6">滚动公告</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form label-width="90px" :inline="true"> <el-form label-width="90px" :inline="true">
<el-form-item label="发送对象:" style="width: 25%"> <el-form-item label="发送对象:" style="width: 25%">
<el-radio-group v-model="tableData.param.popTo"> <el-radio-group v-model="tableData.param.popTo">
<el-radio :label=1>全部玩家</el-radio> <el-radio :label="1">全部玩家</el-radio>
<el-radio :label=2>部分玩家</el-radio> <el-radio :label="2">部分玩家</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item style="width: 50%"> <el-form-item style="width: 50%">
<el-tooltip content="uid之间用分号(;)隔开"> <el-tooltip content="uid之间用分号(;)隔开">
<el-input v-show="tableData.param.popTo==2" v-model="tableData.param.uids" placeholder="玩家uid" <el-input v-show="tableData.param.popTo == 2" v-model="tableData.param.uids" placeholder="玩家uid" clearable />
clearable/>
</el-tooltip> </el-tooltip>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -46,20 +45,20 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="small" @click="inputBig" style="margin-bottom: -15px"> <el-button size="small" @click="inputBig" style="margin-bottom: -15px">
<span style="font-weight:bold;">B</span> <span style="font-weight: bold">B</span>
</el-button> </el-button>
<el-button size="small" @click="inputItalic" style="margin-bottom: -15px"> <el-button size="small" @click="inputItalic" style="margin-bottom: -15px">
<span style="font-style:italic;">I</span> <span style="font-style: italic">I</span>
</el-button> </el-button>
<el-button size="small" @click="inputUnderline" style="margin-bottom: -15px"> <el-button size="small" @click="inputUnderline" style="margin-bottom: -15px">
<span style="text-decoration:underline;">U</span> <span style="text-decoration: underline">U</span>
</el-button> </el-button>
<el-button size="small" @click="inputLink" style="margin-bottom: -15px; padding: 0; padding-left: 5px"> <el-button size="small" @click="inputLink" style="margin-bottom: -15px; padding: 0; padding-left: 5px">
<el-icon type="text"> <el-icon type="text">
<ele-Link /> <ele-Link />
</el-icon> </el-icon>
</el-button> </el-button>
<el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0;"> <el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0">
<el-color-picker size="default" v-model="color" @change="inputColor"></el-color-picker> <el-color-picker size="default" v-model="color" @change="inputColor"></el-color-picker>
</el-button> </el-button>
<el-form-item style="margin-bottom: -15px; margin-left: 20px"> <el-form-item style="margin-bottom: -15px; margin-left: 20px">
@ -67,13 +66,10 @@
</el-form-item> </el-form-item>
</el-form-item> </el-form-item>
<el-form-item label="公告内容:"> <el-form-item label="公告内容:">
<el-input v-model="tableData.param.content" type="textarea" rows="18" @mouseup="inputSelect" <el-input v-model="tableData.param.content" type="textarea" rows="18" @mouseup="inputSelect" @blur="inputSelect" clearable />
@blur="inputSelect" clearable/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="large" type="primary" @click="noticePop"> <el-button size="large" type="primary" @click="noticePop"> 弹窗公告发送 </el-button>
弹窗公告发送
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-card> </el-card>
@ -111,9 +107,7 @@
</el-form> </el-form>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="saveModel(1)"> <el-button type="primary" @click="saveModel(1)"> 保存 </el-button>
保存
</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>
@ -125,38 +119,39 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus'; import { ElMessageBox, ElMessage } from 'element-plus';
import {gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel} from "/@/api/game"; import { gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel } from '/@/api/game';
import {contentReplace, gSwitchServer} from "/@/utils/utils"; import { contentReplace, gSwitchServer } from '/@/utils/utils';
import {ServerCategorize, serverList} from "/@/utils/game"; import { ServerCategorize, serverList } from '/@/utils/game';
interface TableDataState { interface TableDataState {
unselsected: string[] unselsected: string[];
colorPicker: boolean colorPicker: boolean;
color: string color: string;
selected: string selected: string;
urlLink: string urlLink: string;
dbs: object[] dbs: object[];
servers: object[] servers: object[];
model: number model: number;
editModel: object editModel: object;
tableData: { tableData: {
content: string, content: string;
param: { param: {
serverId: number servers: object;
content: string serverId: number;
popType: number content: string;
popTo: number popType: number;
uids: string popTo: number;
noticeId: number uids: string;
noticeId: number;
}; };
}; };
editModelVisible: boolean, editModelVisible: boolean;
listModelVisible: boolean, listModelVisible: boolean;
contentVisible: boolean, contentVisible: boolean;
serverSwitch: number, serverSwitch: number;
serverCategorize: object[], serverCategorize: object[];
} }
export default defineComponent({ export default defineComponent({
@ -164,41 +159,52 @@ export default defineComponent({
setup() { setup() {
const state = reactive<TableDataState>({ const state = reactive<TableDataState>({
serverSwitch: 0, serverSwitch: 0,
unselsected: ["", ""], unselsected: ['', ''],
colorPicker: false, colorPicker: false,
editModelVisible: false, editModelVisible: false,
listModelVisible: false, listModelVisible: false,
contentVisible: false, contentVisible: false,
color: "#000000", color: '#000000',
selected: "替换显示内容", selected: '替换显示内容',
urlLink: "", urlLink: '',
tableData: { tableData: {
content: "", content: '',
param: { param: {
serverId: "", servers: [],
content: "", serverId: '',
uids: "", content: '',
uids: '',
popType: 0, popType: 0,
popTo: 1, popTo: 1,
noticeId: 0 noticeId: 0,
}, },
}, },
dbs: [], dbs: [],
servers: [], servers: [],
model: "", model: '',
editModel: {}, editModel: {},
serverCategorize: ServerCategorize, serverCategorize: ServerCategorize,
}); });
const noticePop = () => { const noticePop = () => {
console.log("Notice: ", state.tableData.param); for (let i in state.tableData.param.servers) {
gameNoticePop(state.tableData.param).then(() => { let data = {
ElMessage.success('发送成功'); serverId: state.tableData.param.servers[i],
content: state.tableData.param.content,
uids: state.tableData.param.uids,
popType: state.tableData.param.popType,
popTo: state.tableData.param.popTo,
noticeId: state.tableData.param.noticeId,
};
console.log('Notice: ', data);
gameNoticePop(data).then(() => {
ElMessage.success(data.serverId + '发送成功');
}).finally(() => { }).finally(() => {
// state.loading = false; // state.loading = false;
}) });
}
}; };
onMounted(() => { onMounted(() => {
serverList().then(value => { serverList().then((value) => {
state.servers = value; state.servers = value;
// console.log(" server : ", state.servers); // console.log(" server : ", state.servers);
}); });
@ -210,9 +216,9 @@ export default defineComponent({
let selectionEnd = res.target.selectionEnd; let selectionEnd = res.target.selectionEnd;
state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)]; state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)];
if (selectionStart == selectionEnd) { if (selectionStart == selectionEnd) {
console.log("same"); console.log('same');
state.selected = '替换显示内容'; state.selected = '替换显示内容';
return return;
} }
state.selected = res.target.value.slice(selectionStart, selectionEnd); state.selected = res.target.value.slice(selectionStart, selectionEnd);
console.log(state.selected); console.log(state.selected);
@ -221,48 +227,48 @@ export default defineComponent({
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1]; state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1];
}; };
var inputBig = () => { var inputBig = () => {
if (state.unselsected[1].indexOf("[/b]") == 0) { if (state.unselsected[1].indexOf('[/b]') == 0) {
return return;
} }
if (state.selected.indexOf("[b]") > -1) { if (state.selected.indexOf('[b]') > -1) {
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, ""); state.selected = state.selected.replace(/\[b]|\[\/b]/gi, '');
changeContent(); changeContent();
return; return;
} }
state.selected = "[b]" + state.selected + "[/b]"; state.selected = '[b]' + state.selected + '[/b]';
changeContent(); changeContent();
console.log(state.unselsected, state.selected.indexOf("[b]"), state.selected, state.tableData.param.content); console.log(state.unselsected, state.selected.indexOf('[b]'), state.selected, state.tableData.param.content);
}; };
var inputItalic = () => { var inputItalic = () => {
if (state.unselsected[1].indexOf("[/i]") == 0) { if (state.unselsected[1].indexOf('[/i]') == 0) {
return return;
} }
if (state.selected.indexOf("[i]") > -1 || (state.unselsected[1].indexOf("[i]") == 0 && state.unselsected[1].indexOf("[/i]") > -1)) { if (state.selected.indexOf('[i]') > -1 || (state.unselsected[1].indexOf('[i]') == 0 && state.unselsected[1].indexOf('[/i]') > -1)) {
state.selected = state.selected.replace(/\[i]|\[\/i]/gi, ""); state.selected = state.selected.replace(/\[i]|\[\/i]/gi, '');
changeContent(); changeContent();
return; return;
} }
state.selected = "[i]" + state.selected + "[/i]"; state.selected = '[i]' + state.selected + '[/i]';
changeContent(); changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content); console.log(state.unselsected, state.selected, state.tableData.param.content);
}; };
var inputUnderline = () => { var inputUnderline = () => {
if (state.unselsected[1].indexOf("[/u]") == 0) { if (state.unselsected[1].indexOf('[/u]') == 0) {
return return;
} }
if (state.selected.indexOf("[u]") > -1) { if (state.selected.indexOf('[u]') > -1) {
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, ""); state.selected = state.selected.replace(/\[u]|\[\/u]/gi, '');
changeContent(); changeContent();
return; return;
} }
state.selected = "[u]" + state.selected + "[/u]"; state.selected = '[u]' + state.selected + '[/u]';
changeContent(); changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content); console.log(state.unselsected, state.selected, state.tableData.param.content);
}; };
var inputLink = () => { var inputLink = () => {
if (state.selected.indexOf("[/url]") > -1) { if (state.selected.indexOf('[/url]') > -1) {
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, ""); state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, '');
changeContent(); changeContent();
return; return;
} }
@ -274,15 +280,14 @@ export default defineComponent({
inputErrorMessage: 'Invalid http request', inputErrorMessage: 'Invalid http request',
}).then(({ value }) => { }).then(({ value }) => {
state.urlLink = value; state.urlLink = value;
if (state.unselsected[1].indexOf("[/url]") == 0) { if (state.unselsected[1].indexOf('[/url]') == 0) {
return return;
} }
state.selected = "[url=" + state.urlLink + "]" + state.selected + "[/url]"; state.selected = '[url=' + state.urlLink + ']' + state.selected + '[/url]';
changeContent(); changeContent();
state.urlLink = ''; state.urlLink = '';
console.log(state.unselsected, state.selected, state.tableData.param.content); console.log(state.unselsected, state.selected, state.tableData.param.content);
}); });
}; };
var buttonColor = () => { var buttonColor = () => {
// if(state.selected.indexOf("[/color]") > -1){ // if(state.selected.indexOf("[/color]") > -1){
@ -291,23 +296,23 @@ export default defineComponent({
// } // }
}; };
var inputColor = () => { var inputColor = () => {
if (!state.color || state.color == "#000000") { if (!state.color || state.color == '#000000') {
if (state.selected.indexOf("[/color]") > -1) { if (state.selected.indexOf('[/color]') > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, '');
changeContent(); changeContent();
return; return;
} }
return; return;
} }
if (state.unselsected[1].indexOf("[/color]") == 0) { if (state.unselsected[1].indexOf('[/color]') == 0) {
return return;
} }
if (state.selected.indexOf("[/color]") > -1) { if (state.selected.indexOf('[/color]') > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, '');
// changeContent(); // changeContent();
// return; // return;
} }
state.selected = "[color=" + state.color + "]" + state.selected + "[/color]"; state.selected = '[color=' + state.color + ']' + state.selected + '[/color]';
changeContent(); changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content); console.log(state.unselsected, state.selected, state.tableData.param.content);
}; };
@ -318,10 +323,10 @@ export default defineComponent({
if (res.data.noticeModel) { if (res.data.noticeModel) {
state.dbs = res.data.noticeModel; state.dbs = res.data.noticeModel;
} }
}) });
}; };
const useModel = () => { const useModel = () => {
let model = state.dbs.find(r => r.id == state.model); let model = state.dbs.find((r) => r.id == state.model);
if (model) { if (model) {
state.tableData.param.content = model.content; state.tableData.param.content = model.content;
} }
@ -336,7 +341,7 @@ export default defineComponent({
state.editModelVisible = true; state.editModelVisible = true;
break; break;
case 2: case 2:
state.editModel = state.dbs.find(model => model.id == id); state.editModel = state.dbs.find((model) => model.id == id);
state.editModelVisible = true; state.editModelVisible = true;
break; break;
case 3: case 3:
@ -349,10 +354,11 @@ export default defineComponent({
// } // }
gameGMNoticeModelDel({ gameGMNoticeModelDel({
id: id, id: id,
}).then(function () { })
getModel() .then(function () {
}).finally(function () { getModel();
}); })
.finally(function () {});
break; break;
} }
}; };
@ -364,10 +370,12 @@ export default defineComponent({
id: state.editModel.id, id: state.editModel.id,
title: state.editModel.title, title: state.editModel.title,
content: state.editModel.content, content: state.editModel.content,
noticeType: 1 noticeType: 1,
}).then(function () { })
getModel() .then(function () {
}).finally(function () { getModel();
})
.finally(function () {
state.editModelVisible = false; state.editModelVisible = false;
}); });
break; break;
@ -382,7 +390,7 @@ export default defineComponent({
}; };
const handleClose = (done: () => void) => { const handleClose = (done: () => void) => {
// ElMessageBox.confirm('退').then(() => { // ElMessageBox.confirm('退').then(() => {
done() done();
// }).catch(() => { // }).catch(() => {
// // catch error // // catch error
// }) // })
@ -390,10 +398,10 @@ export default defineComponent({
const showContent = () => { const showContent = () => {
state.contentVisible = true; state.contentVisible = true;
state.tableData.content = contentReplace(state.tableData.param.content); state.tableData.content = contentReplace(state.tableData.param.content);
console.log(state.tableData.content) console.log(state.tableData.content);
}; };
const switchServer = () => { const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers) return gSwitchServer(state.serverSwitch, state.servers);
}; };
return { return {
switchServer, switchServer,

10
src/views/gameOrder/deposit/index.vue

@ -29,7 +29,7 @@
</el-card>--> </el-card>-->
<el-card shadow="hover"> <el-card shadow="hover">
<div class="mb15"> <div class="mb15">
<el-form label-position="right" label-width="300px" style="max-width: 520px"> <el-form label-position="right" label-width="300px" style="max-width: 600px">
<!-- <el-form-item label="选择区服" prop="serverId">--> <!-- <el-form-item label="选择区服" prop="serverId">-->
<!-- <el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="">--> <!-- <el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="">-->
<!-- <el-option v-for="item in servers" :key="item.value" :label="item.label" :value="item.value"/>--> <!-- <el-option v-for="item in servers" :key="item.value" :label="item.label" :value="item.value"/>-->
@ -37,12 +37,14 @@
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="选择服务器" prop="serverId"> <el-form-item label="选择服务器" prop="serverId">
<div>
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> <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-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select> </el-select>
<el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> <el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" /> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" />
</el-select> </el-select>
</div>
</el-form-item> </el-form-item>
<!-- <el-form-item label="uid">--> <!-- <el-form-item label="uid">-->
<!-- <el-input v-model="tableData.paramDeposit.serverId" placeholder="请输入玩家uid" class="w-50 m-2" clearable/>--> <!-- <el-input v-model="tableData.paramDeposit.serverId" placeholder="请输入玩家uid" class="w-50 m-2" clearable/>-->
@ -51,7 +53,7 @@
<el-input v-model="tableData.paramDeposit.account" placeholder="请输入玩家uid" class="w-50 m-2" clearable /> <el-input v-model="tableData.paramDeposit.account" placeholder="请输入玩家uid" class="w-50 m-2" clearable />
</el-form-item> </el-form-item>
<el-form-item label="充值金额"> <el-form-item label="充值金额">
<el-select v-model="tableData.paramDeposit.depositId" class="w-50 m-2" placeholder=""> <el-select v-model="tableData.paramDeposit.depositId" class="m-2" placeholder="" style="width: 300px">
<el-option v-for="item in depositIds" v-show="item.Currency == 1" :key="item.Id" :label="item.Name" :value="item.Id" /> <el-option v-for="item in depositIds" v-show="item.Currency == 1" :key="item.Id" :label="item.Name" :value="item.Id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -199,8 +201,8 @@ export default defineComponent({
// //
onMounted(() => { onMounted(() => {
serverList().then((res) => { serverList().then((res) => {
state.servers = res state.servers = res;
state.tableData.paramDeposit.serverId = "" + res[0].id; state.tableData.paramDeposit.serverId = '' + res[0].id;
}); });
}); });
return { return {

223
src/views/gameOrder/gmOrderList/index.vue

@ -0,0 +1,223 @@
<template>
<div class="game-order-container">
<el-card shadow="hover">
<div class="game-order-search mb15">
<el-form :inline="true">
<el-form-item label="渠道" prop="channel">
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道">
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="选择区服" prop="server">
<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="tableData.param.server" class="m-2" placeholder="选择区服" clearable filterable>
<el-option v-for="item in switchServer()" :key="item.id + ''" :label="item.name" :value="item.id + ''" />
</el-select>
</el-form-item>
<el-form-item label="uid">
<el-input size="default" v-model="tableData.param.uid" placeholder="请输入uid" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="起始时间" prop="lowTime">
<el-date-picker
type="datetime"
size="large"
v-model="tableData.param.cTime"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item label="终止时间" prop="time">
<el-date-picker type="datetime" v-model="tableData.param.eTime" format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
<el-form-item label="订单id">
<el-input size="default" v-model="tableData.param.tradeNo" placeholder="请输入渠道订单id" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="操作人员">
<el-input size="default" v-model="tableData.param.config" placeholder="请输入操作人员" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="操作人员">
<el-input size="default" v-model="tableData.param.user" placeholder="请输入操作人员" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item>
<el-button size="default" type="primary" class="ml10" @click="orderList">
<el-icon>
<ele-Search />
</el-icon>
查询
</el-button>
</el-form-item>
</el-form>
</div>
<el-table :data="tableData.data" style="width: 100%" border>
<el-table-column prop="tradeNo" label="订单id" show-overflow-tooltip></el-table-column>
<el-table-column prop="unitId" label="id" show-overflow-tooltip></el-table-column>
<el-table-column prop="amount" label="金额(元)" show-overflow-tooltip width="120"></el-table-column>
<el-table-column prop="createTime" label="充值时间" show-overflow-tooltip width="180"></el-table-column>
<el-table-column prop="remark" label="状态" show-overflow-tooltip width="120">
<template #default="scope">
<div v-if="scope.row.remark == ''" style="color: #e60000">充值失败</div>
<div v-else-if="scope.row.remark == 'SUCCESS'">充值成功</div>
<div v-else>{{ scope.row.remark }}</div>
</template>
</el-table-column>
<el-table-column prop="channel" label="渠道" show-overflow-tooltip width="120">
<template #default="scope">
<span>{{ channels.find((r) => r.value == scope.row.channel)?.label }}</span>
</template>
</el-table-column>
<el-table-column prop="server" label="区服" show-overflow-tooltip width="120">
<template #default="scope">
<span>{{ servers.find((r) => r.id == scope.row.server).name }}</span>
</template>
</el-table-column>
</el-table>
<el-row justify="space-evenly">
<el-pagination
:hide-on-single-page="true"
v-model:page-size="tableData.param.pageSize"
v-model:current-page="tableData.param.pageNum"
:pager-count="5"
@current-change="orderList"
layout="total, prev, pager, next"
:total="tableData.total"
/>
</el-row>
</el-card>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { gameRechargeChangeStateDelete, gmOrderList } from '/@/api/game';
import { allChannelList, ServerCategorize, serverList, ServerList } from '/@/utils/game';
import RechargeConfigCategory from '/@/api/config/RechargeConfigCategory.json';
import { ElMessage, ElMessageBox } from 'element-plus/es';
import { gSwitchServer } from '/@/utils/utils';
//
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: {
uid: number;
channel: string;
tradeNo: string;
cTime: string;
eTime: string;
server: string;
config: string;
user: string;
pageNum: number;
pageSize: number;
};
};
servers: object;
channels: object;
rechargeInfo: object[];
}
export default defineComponent({
name: 'apiV1GameOrderOrderList',
setup() {
// const {proxy} = getCurrentInstance() as any;
const state = reactive<TableDataState>({
serverSwitch: 0,
serverCategorize: ServerCategorize,
tableData: {
data: [],
total: 0,
param: {
uid: '',
channel: '',
tradeNo: '',
cTime: '',
eTime: '',
server: '',
config: '',
user: '',
pageSize: 10,
pageNum: 1,
},
},
servers: ServerList,
channels: [],
rechargeInfo: RechargeConfigCategory,
});
const orderList = () => {
gmOrderList(state.tableData.param).then((res) => {
console.log(res);
state.tableData.total = Number(res.data.total) || 0;
state.tableData.data = res.data.list || [];
});
};
//
onMounted(() => {
serverList().then((res) => {
state.servers = res;
});
allChannelList().then((res) => {
state.channels = res;
});
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
const changeState = (order: string, state: number, remark: string) => {
if (state != 3 && state != 2) {
return;
}
if (state == 3) {
let mess = '是否确认订单失效?,点击确认后本条订单失效。';
ElMessageBox.confirm(mess).then(() => {
gameRechargeChangeStateDelete({ order: order, state: state }).then((res) => {
if (res.data.data == 1) {
ElMessage.success('发送成功');
}
orderList();
});
});
} else if (state == 2) {
ElMessageBox.prompt('请输入修改成功理由', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
inputErrorMessage: 'Invalid http request',
}).then(({ value }) => {
gameRechargeChangeStateDelete({ order: order, state: state, remark: remark + ', ' + value }).then((res) => {
if (res.data.data == 1) {
ElMessage.success('发送成功');
}
orderList();
});
});
}
};
return {
switchServer,
orderList,
changeState,
...toRefs(state),
};
},
});
</script>

3
src/views/gameOrder/orderLog/index.vue

@ -5,8 +5,7 @@
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="渠道" prop="channel"> <el-form-item label="渠道" prop="channel">
<el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道"> <el-select v-model="tableData.param.channel" class="m-2" placeholder="选择渠道">
<el-option v-for="item in channels" :key="item.value" :label="item.label" <el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value"/>
:value="item.value"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="选择区服" prop="server"> <el-form-item label="选择区服" prop="server">

8
src/views/gameRole/account/index.vue

@ -8,7 +8,7 @@
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> <el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/>
</el-select> </el-select>
<el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable> <el-select v-model="queryParams.serverId" class="m-2" placeholder="选择服务器" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id+''"/> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="账号"> <el-form-item label="账号">
@ -97,7 +97,7 @@ export default defineComponent({
serverSwitch: 0, serverSwitch: 0,
queryParams: { queryParams: {
account: "", account: "",
serverId: 1, serverId: "",
id: "", id: "",
pageSize: 10, pageSize: 10,
pageNum: 1, pageNum: 1,
@ -105,7 +105,7 @@ export default defineComponent({
tableData: { tableData: {
data: [], data: [],
total: 0, total: 0,
accountType: [{label: "正常", value: 0}, {label: "黑名单", value: 0}, {label: "GM", value: 0}] accountType: [{label: "正常", value: 0}, {label: "黑名单", value: 1}, {label: "GM", value: 2}]
}, },
servers: [], servers: [],
serverCategorize: ServerCategorize, serverCategorize: ServerCategorize,
@ -132,12 +132,12 @@ export default defineComponent({
onMounted(() => { onMounted(() => {
serverList().then(res => { serverList().then(res => {
state.servers = res; state.servers = res;
state.queryParams.serverId = res[0].id;
}); });
}); });
const switchServer = () => { const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers) return gSwitchServer(state.serverSwitch, state.servers)
}; };
return { return {

55
src/views/gameRole/online/index.vue

@ -33,9 +33,7 @@
<div class="system-user-search mb15"> <div class="system-user-search mb15">
<div v-for="(num, k) in tableData.topNumbers" :key="k"> <div v-for="(num, k) in tableData.topNumbers" :key="k">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item> <el-form-item> {{ servers.find((res) => res.id == k).name }}</el-form-item>
{{ servers.find(res => res.id == k).name }}
</el-form-item>
<el-form-item label="在线数量"> <el-form-item label="在线数量">
{{ tableData.Numbers[k] || 0 }} {{ tableData.Numbers[k] || 0 }}
</el-form-item> </el-form-item>
@ -65,7 +63,10 @@
<!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>--> <!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>-->
<!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>--> <!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>-->
</el-table> </el-table>
<el-pagination :hide-on-single-page="true" v-show="tableData.total>0" :total="tableData.total" <el-pagination
:hide-on-single-page="true"
v-show="tableData.total > 0"
:total="tableData.total"
v-model:page-size="tableData.param.pageNum" v-model:page-size="tableData.param.pageNum"
v-model:current-page="tableData.param.pageSize" v-model:current-page="tableData.param.pageSize"
@pagination="onlineList" @pagination="onlineList"
@ -76,12 +77,12 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; import { toRefs, reactive, onMounted, defineComponent } from 'vue';
//import { ElMessageBox, ElMessage } from 'element-plus'; //import { ElMessageBox, ElMessage } from 'element-plus';
// import EditRole from '/@/views/system/role/component/editRole.vue'; // import EditRole from '/@/views/system/role/component/editRole.vue';
import {allServerList, ServerCategorize, ServerList} from "/@/utils/game"; import { allServerList, ServerCategorize, ServerList } from '/@/utils/game';
import {gameOnlineList, gameOnlineTopList} from "/@/api/game"; import { gameOnlineList, gameOnlineTopList } from '/@/api/game';
import {gSwitchServer} from "/@/utils/utils"; import { gSwitchServer } from '/@/utils/utils';
// //
interface TableData { interface TableData {
@ -97,13 +98,14 @@ interface TableDataState {
data: Array<TableData>; data: Array<TableData>;
param: { param: {
serverId: number; serverId: number;
} };
TotalNumber: number; TotalNumber: number;
Numbers: object; Numbers: object;
topNumbers: object; topNumbers: object;
total: number; total: number;
}; };
servers: object[] topOnlineCount: number;
servers: object[];
serverCategorize: object[]; serverCategorize: object[];
} }
@ -115,7 +117,7 @@ export default defineComponent({
tableData: { tableData: {
data: [], data: [],
param: { param: {
serverId: "" serverId: '',
}, },
Numbers: {}, Numbers: {},
topNumbers: {}, topNumbers: {},
@ -124,19 +126,20 @@ export default defineComponent({
topNumber: 0, topNumber: 0,
total: 0, total: 0,
}, },
topOnlineCount: 0,
servers: ServerList, servers: ServerList,
serverCategorize: ServerCategorize serverCategorize: ServerCategorize,
}); });
const onlineList = () => { const onlineList = () => {
// const data: Array<any> = []; // const data: Array<any> = [];
state.tableData.TotalNumber = 0; state.tableData.TotalNumber = 0;
if (state.tableData.param.serverId == "") { if (state.tableData.param.serverId == '') {
for (let server in state.servers) { for (let server in state.servers) {
onlines(state.servers[server].id) onlines(state.servers[server].id);
} }
} else { } else {
const data: Array<any> = []; const data: Array<any> = [];
gameOnlineList(state.tableData.param).then(res => { gameOnlineList(state.tableData.param).then((res) => {
console.log(res.data); console.log(res.data);
const list = res.data.onlines ?? []; const list = res.data.onlines ?? [];
state.tableData.Number = res.data.total; state.tableData.Number = res.data.total;
@ -149,33 +152,39 @@ export default defineComponent({
state.tableData.data = data; state.tableData.data = data;
}); });
} }
gameOnlineTopList(state.tableData.param).then(res => { if (state.topOnlineCount == 0) {
console.log(res.data); state.topOnlineCount = 1;
setTimeout(function () {
state.topOnlineCount = 0;
}, 30000);
gameOnlineTopList(state.tableData.param).then((res) => {
console.log("gameOnlineTopList: ", res.data);
const list = res.data.onlines ?? []; const list = res.data.onlines ?? [];
for (let i in list) { for (let i in list) {
state.tableData.topNumbers[list[i].server] = list[i].num; state.tableData.topNumbers[list[i].server] = list[i].num;
} }
}) });
}
}; };
const onlines = (server: number) => { const onlines = (server: number) => {
if (!server) { if (!server) {
return; return;
} }
gameOnlineList({serverId: server}).then(res => { gameOnlineList({ serverId: server }).then((res) => {
console.log(res.data); console.log('server: ', server, ' data: ', res.data);
state.tableData.Numbers[server] = res.data.total; state.tableData.Numbers[server] = res.data.total;
state.tableData.TotalNumber += res.data.total; state.tableData.TotalNumber += res.data.total;
}); });
}; };
// //
onMounted(() => { onMounted(() => {
allServerList().then(res => { allServerList().then((res) => {
// console.log(res); // console.log(res);
state.servers = res; state.servers = res;
}) });
}); });
const switchServer = () => { const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers) return gSwitchServer(state.serverSwitch, state.servers);
}; };
return { return {
switchServer, switchServer,

10
src/views/gameRole/role/index.vue

@ -137,7 +137,7 @@
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="物品名称:"> <el-form-item label="物品名称:">
<el-select size="default" v-model="queryParams.itemName" filterable placeholder="请填写物品名称"> <el-select size="default" v-model="queryParams.itemName" filterable placeholder="请填写物品名称">
<el-option v-for="item in allItemConfig" :key="item.Id" :label="item.Name" :value="item.Name" /> <el-option v-for="item in allItemConfig" :key="item.Id" :label="item.DetailsPageName" :value="item.Id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -742,8 +742,8 @@ export default defineComponent({
villager: { list: [] }, villager: { list: [] },
accountType: [ accountType: [
{ label: '正常', value: 0 }, { label: '正常', value: 0 },
{ label: '黑名单', value: 0 }, { label: '黑名单', value: 1 },
{ label: 'GM', value: 0 }, { label: 'GM', value: 2 },
], ],
}, },
seasonConfig: SeasonConfigCategory, seasonConfig: SeasonConfigCategory,
@ -1061,7 +1061,7 @@ export default defineComponent({
if (!item) { if (!item) {
break; break;
} }
buildingList[i].gemName += (buildingList[i].gemName.length > 0 ? ';' : '') + item.Name; buildingList[i].gemName += (buildingList[i].gemName.length > 0 ? ';' : '') + item.DetailsPageName;
let config = TreasureConfigCategory.find((r) => r.Id == item.RelatedId); let config = TreasureConfigCategory.find((r) => r.Id == item.RelatedId);
if (!config) { if (!config) {
break; break;
@ -1341,7 +1341,7 @@ export default defineComponent({
', 繁荣值: ' + ', 繁荣值: ' +
data.prosperity; data.prosperity;
} else if (type == 2) { } else if (type == 2) {
state.showData = '铜币: ' + data.goldIngot + ', 桃花石: ' + data.copper + ', 基础食物: ' + data.baseFood; state.showData = '桃花石: ' + data.goldIngot + ', 铜币: ' + data.copper + ', 基础食物: ' + data.baseFood;
} else if (type == 3) { } else if (type == 3) {
state.showData = ''; state.showData = '';
} }

120
src/views/gameSet/auditMode/component/editConfig.vue

@ -0,0 +1,120 @@
<template>
<div>
<el-dialog :title="(isNew ? '新增' : '修改') + setName.label + '模式:'" v-model="isShowDialog">
<el-form label-width="130px" label-position="right">
<el-form-item label="渠道:">
<el-select v-model="tableData.param.channel" class="m-2">
<el-option v-for="item in channels" :key="item.id + ''" :label="item.label" :value="item.value + ''" />
</el-select>
</el-form-item>
<el-form-item label="版本号:">
<el-input v-model="tableData.param.version" class="m-2"></el-input>
</el-form-item>
<el-form-item :label="setName.label + '模式:'">
<el-radio-group v-model="tableData.param.auditMode">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel" size="default"> </el-button>
<el-button size="default" type="primary" class="ml10" @click="addVersion">
<el-icon>
<ele-Promotion />
</el-icon>
发送
</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script lang="ts">
import { reactive, toRefs, defineComponent } from 'vue';
import { allChannelList } from '/src/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus';
import { gameSetAuditMode } from '/src/api/game/set';
interface TableData {
name: string;
channel: string;
version: string;
auditMode: number;
}
interface TableDataState {
channels: Array<{ label: string; value: string }>;
isShowDialog: boolean;
tableData: {
param: TableData;
};
setName: object;
isNew: boolean;
}
export default defineComponent({
name: 'gameEditClientBug',
setup(prop, { emit }) {
const state = reactive<TableDataState>({
channels: [],
isShowDialog: false,
tableData: {
param: {
name: '',
channel: '',
version: '',
auditMode: '1',
},
},
setName: {},
isNew: false,
});
//
const openDialog = (row: TableData, setName, isNew) => {
console.log(row);
state.setName = setName;
state.isNew = isNew;
allChannelList().then((value) => {
state.channels = value;
state.tableData.param = row;
state.isShowDialog = true;
});
};
//
const closeDialog = () => {
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
//
const addVersion = () => {
closeDialog();
ElMessageBox.confirm(`此操作将修改审核模式,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
gameSetAuditMode(state.tableData.param).then(() => {
ElMessage.success('修改成功');
emit('mailList');
});
})
.catch(() => {});
};
return {
openDialog,
closeDialog,
onCancel,
addVersion,
...toRefs(state),
};
},
});
</script>

91
src/views/gameSet/auditMode/index.vue

@ -1,7 +1,12 @@
<template> <template>
<div class="system-role-container"> <div class="system-role-container">
<el-card shadow="hover" header="审核模式设置"> <el-card shadow="hover" :header="setName.label + '设置'">
<el-form> <el-form :inline="true">
<el-form-item label="选择设置模式">
<el-select v-model="tableData.param.name" class="m-2" @change="changeName" placeholder="选择设置模式" filterable>
<el-option v-for="item in names" :key="item" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="onOpenAdd()"> <el-button type="primary" @click="onOpenAdd()">
<el-icon> <el-icon>
@ -12,17 +17,30 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table :data="tableData.data" style="width: 100%"> <el-table :data="tableData.data" style="width: 100%">
<el-table-column prop="label" label="渠道" width="200"> <el-table-column prop="label" label="渠道(优先判断)" width="200">
<template #default="scope"> <template #default="scope">
{{ channels.find(r => r.value == scope.row.label.substring(0, 12))?channels.find(r => r.value == scope.row.label.substring(0, 12)).label: scope.row.label.substring(0, 12)}} <div v-if="scope.row.label.length >= 12">
{{
channels.find((r) => r.value == scope.row.label.substring(0, 12))
? channels.find((r) => r.value == scope.row.label.substring(0, 12)).label
: scope.row.label.substring(0, 12)
}}
</div>
<div v-if="scope.row.label.length < 12">
{{ channels.find((r) => r.value == '') ? channels.find((r) => r.value == '').label : '' }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="label" label="版本号" width="200"> <el-table-column prop="label" label="版本号" width="200">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.label.length > 12">
{{ scope.row.label.substring(12) }} {{ scope.row.label.substring(12) }}
</div>
<div v-if="scope.row.label.length < 12">{{ scope.row.label }}</div>
<div v-else>所有版本</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="value" label="审核模式" show-overflow-tooltip width="100"> <el-table-column prop="value" :label="setName.label + '模式'" show-overflow-tooltip width="200">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.value == 0"></div> <div v-if="scope.row.value == 0"></div>
<div v-if="scope.row.value == 1"></div> <div v-if="scope.row.value == 1"></div>
@ -30,10 +48,8 @@
</el-table-column> </el-table-column>
<el-table-column prop="value" label="操作" show-overflow-tooltip width="100"> <el-table-column prop="value" label="操作" show-overflow-tooltip width="100">
<template #default="scope"> <template #default="scope">
<el-button size="small" type="text" @click="onRowDel(scope.row)">删除 <el-button size="small" type="text" @click="onRowDel(scope.row)">删除</el-button>
</el-button> <el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改</el-button>
<el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -43,11 +59,11 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import {toRefs, reactive, onMounted, defineComponent, ref,} from 'vue'; import { toRefs, reactive, onMounted, defineComponent, ref } from 'vue';
import {allChannelList, serverList} from "/@/utils/game"; import { allChannelList, serverList, GameSetList } from '/@/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus'; import { ElMessage, ElMessageBox } from 'element-plus';
import {gameDelAuditMode, gameGetAllAuditMode} from "/@/api/game/set"; import { gameDelAuditMode, gameGetAllAuditMode } from '/@/api/game/set';
import EditConfig from "/@/views/gameBug/clientBug/component/editConfig.vue"; import EditConfig from '/src/views/gameSet/auditMode/component/editConfig.vue';
interface TableDataState { interface TableDataState {
contentVisible: boolean; contentVisible: boolean;
@ -57,9 +73,12 @@ interface TableDataState {
total: number; total: number;
content: string; content: string;
param: {}; param: {};
name: string;
}; };
servers: object[] servers: object[];
channels: object[] channels: object[];
setName: object;
names: object[];
} }
export default defineComponent({ export default defineComponent({
@ -72,14 +91,18 @@ export default defineComponent({
tableData: { tableData: {
data: [], data: [],
total: 0, total: 0,
content: "", content: '',
param: {}, param: {
name: GameSetList[0].value,
}, },
channels: [] },
channels: [],
setName: GameSetList[0],
names: GameSetList,
}); });
const mailList = () => { const mailList = () => {
gameGetAllAuditMode().then(res => { gameGetAllAuditMode(state.tableData.param).then((res) => {
console.log(res); console.log(res);
state.tableData.data = []; state.tableData.data = [];
if (res.data) { if (res.data) {
@ -89,10 +112,10 @@ export default defineComponent({
state.tableData.data.push({ state.tableData.data.push({
label: i, label: i,
value: data[i], value: data[i],
}) });
} }
} }
}) });
}; };
// //
@ -106,41 +129,46 @@ export default defineComponent({
confirmButtonText: '确认', confirmButtonText: '确认',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(() => { })
.then(() => {
gameDelAuditMode({ label: row.label }).then(() => { gameDelAuditMode({ label: row.label }).then(() => {
ElMessage.success('完成bug成功'); ElMessage.success('完成bug成功');
mailList(); mailList();
})
}).catch(() => {
}); });
})
.catch(() => {});
}; };
// //
onMounted(() => { onMounted(() => {
serverList().then(value => { serverList().then((value) => {
state.servers = value; state.servers = value;
// console.log(" servers : ", state.servers);
}); });
allChannelList().then(value => { allChannelList().then((value) => {
state.channels = value; state.channels = value;
// console.log(" channels : ", state.channels);
}); });
mailList(); mailList();
}); });
// //
const onOpenAdd = () => { const onOpenAdd = () => {
editDicRef.value.openDialog({auditMode: "1", channel: "", version: ""}); editDicRef.value.openDialog({ auditMode: '1', channel: '', version: '', name: state.tableData.param.name }, state.setName, true);
}; };
// //
const onOpenEdit = (row: any) => { const onOpenEdit = (row: any) => {
let data = {auditMode: row.value, channel: "", version: ""} let data = { auditMode: row.value, channel: '', version: '', name: state.tableData.param.name };
if (row.label.length > 12) { if (row.label.length > 12) {
data.channel = row.label.substring(0, 12); data.channel = row.label.substring(0, 12);
data.version = row.label.substring(12); data.version = row.label.substring(12);
} else if (row.label.length == 12) { } else if (row.label.length == 12) {
data.channel = row.label; data.channel = row.label;
} else if (row.label.length < 12) {
data.version = row.label;
} }
editDicRef.value.openDialog(data); editDicRef.value.openDialog(data, state.setName, false);
};
const changeName = () => {
state.setName = state.names.find((r) => r.value === state.tableData.param.name);
mailList();
}; };
return { return {
editDicRef, editDicRef,
@ -149,6 +177,7 @@ export default defineComponent({
mailList, mailList,
onOpenAdd, onOpenAdd,
onOpenEdit, onOpenEdit,
changeName,
...toRefs(state), ...toRefs(state),
}; };
}, },

Loading…
Cancel
Save