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. 284
      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. 74
      src/views/gameManage/copyUnit/index.vue
  13. 423
      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. 848
      src/views/gameNotice/pop/index.vue
  22. 26
      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. 347
      src/views/gameRole/online/index.vue
  27. 10
      src/views/gameRole/role/index.vue
  28. 120
      src/views/gameSet/auditMode/component/editConfig.vue
  29. 311
      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>

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

@ -1,106 +1,210 @@
<template> <template>
<div> <div>
<el-dialog title="添加参数" v-model="isShowDialog" width="769px"> <el-dialog title="添加参数" v-model="isShowDialog" width="769px">
<el-form label-width="90px" label-position="right"> <el-form label-width="90px" label-position="right">
<el-form-item label="选择渠道" prop="serverId"> <el-form-item label="选择渠道" prop="serverId">
<el-select v-model="queryParams.channel" class="m-2" placeholder="选择渠道" size="large"> <el-select v-model="queryParams.channel" class="m-2" placeholder="选择渠道" size="large">
<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>
<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"
</el-form-item> range-separator="-"
<el-form-item label="兑换次数" prop="times" label-width="100px"> type="datetimerange"
<div class="flex-warp"> v-model="queryParams.dates"
<el-input-number v-model="queryParams.times" placeholder="请输入兑换次数" size="large" start-placeholder="开始"
controls-position="right" :min="1" style="width: 220px"/> end-placeholder="结束"
</div> value-format="YYYY-MM-DD HH:mm:ss"
</el-form-item> />
</el-form> </el-form-item>
<template #footer> <el-form-item label="兑换次数" prop="times" label-width="100px">
<div class="flex-warp">
<el-input-number
v-model="queryParams.times"
placeholder="请输入兑换次数"
size="large"
controls-position="right"
:min="1"
style="width: 220px"
/>
</div>
</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>
<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>
修改 修改
</el-button> </el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<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({
name: 'systemEditDicData', name: 'systemEditDicData',
setup(prop, {emit}) { setup(prop, { emit }) {
const state = reactive<TableDataState>({ const state = reactive<TableDataState>({
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;
state.channels = res; allChannelList().then((res) => {
}) state.channels = res;
}; });
};
// //
const closeDialog = () => { const closeDialog = () => {
state.isShowDialog = false; state.isShowDialog = false;
}; };
// //
const onCancel = () => { const onCancel = () => {
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;
console.log(state.queryParams, data); }
updateGiftExchange(data).then((res) => { data['startTime'] = state.queryParams.dates[0];
console.log(res); data['stopTime'] = state.queryParams.dates[1];
}).finally(function () { data['configId'] = state.queryParams.id;
loading.close(); data['channel'] = state.queryParams.channel;
emit('countList') data['times'] = state.queryParams.times;
closeDialog(); data['awards'] = state.queryParams.awards;
}); console.log(state.queryParams, data);
updateGiftExchange(data)
}; .then((res) => {
return { console.log(res);
openDialog, })
closeDialog, .finally(function () {
onCancel, loading.close();
addItem, emit('countList');
...toRefs(state), 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 {
openDialog,
closeDialog,
onCancel,
update,
addItem,
delItem,
...toRefs(state),
};
},
}); });
</script> </script>

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";

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

@ -16,25 +16,25 @@
</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>
<!-- <el-form-item label="原账号服务器">--> <!-- <el-form-item label="原账号服务器">-->
<!-- <el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" filterable>--> <!-- <el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" filterable>-->
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id" />--> <!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id" />-->
<!-- </el-select>--> <!-- </el-select>-->
<!-- </el-form-item>--> <!-- </el-form-item>-->
<el-form-item label="原账号服务器" prop="SrcServer"> <el-form-item label="原账号服务器" prop="SrcServer">
<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.SrcServer" class="m-2" placeholder="选择服务器" size="large" filterable> <el-select v-model="tableData.data.SrcServer" 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>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="large" type="primary" class="ml10" @click="copyUnit"> 复制 </el-button> <el-button size="large" type="primary" class="ml10" @click="copyUnit"> 复制</el-button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled" :loading="loading"> <el-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled" :loading="loading">
@ -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/>-->
@ -100,21 +100,21 @@
<el-form-item label="目标账号"> <el-form-item label="目标账号">
<el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable /> <el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item> </el-form-item>
<el-form-item label="目标服务器" prop="DestServer"> <el-form-item label="目标服务器" prop="DestServer">
<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.DestServer" class="m-2" placeholder="选择服务器" size="large" filterable> <el-select v-model="tableData.data.DestServer" 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>
</el-form-item> </el-form-item>
<!-- <el-form-item label="目标服务器">--> <!-- <el-form-item label="目标服务器">-->
<!-- <el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" filterable>--> <!-- <el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" filterable>-->
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id"/>--> <!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id"/>-->
<!-- </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="updateUnit"> 更新 </el-button> <el-button size="large" type="primary" class="ml10" @click="updateUnit"> 更新</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -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>
@ -149,7 +149,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" class="ml10" @click="delAccount"> 删除账号 </el-button> <el-button type="primary" class="ml10" @click="delAccount"> 删除账号</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -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>
@ -186,7 +186,7 @@
<el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large" clearable /> <el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="large" type="primary" class="ml10" @click="resetPwd"> 修改登录密码 </el-button> <el-button size="large" type="primary" class="ml10" @click="resetPwd"> 修改登录密码</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -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;

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

@ -1,224 +1,229 @@
<template> <template>
<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="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-select v-model="tableData.data.channel" class="w-50 m-2" placeholder="选择渠道" size="large"> <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> <el-form-item label="账号" v-if="tableData.data.type == 2">
<el-form-item label="账号" v-if="tableData.data.type==2"> <el-input v-model="tableData.data.account" placeholder="" class="w-50 m-2" size="large" clearable />
<el-input v-model="tableData.data.account" placeholder="" class="w-50 m-2" size="large" clearable/> </el-form-item>
</el-form-item> <el-form-item label="uid" v-if="tableData.data.type == 1">
<el-form-item label="uid" v-if="tableData.data.type==1"> <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="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-select v-model="tableData.data.gmState" class="w-50 m-2" placeholder="选择渠道" size="large"> <el-option v-for="item in gmStates" :key="item.value" :label="item.label" :value="item.value" />
<el-option v-for="item in gmStates" :key="item.value" :label="item.label" </el-select>
:value="item.value"/> </el-form-item>
</el-select> <el-form-item>
</el-form-item> <el-button size="large" type="primary" class="ml10" @click="gmSearch"> 查询</el-button>
<el-form-item> <el-button size="large" type="primary" class="ml10" @click="gmChange"> 修改</el-button>
<el-button size="large" type="primary" class="ml10" @click="gmSearch"> </el-form-item>
查询 </el-form>
</el-button> </div>
<el-button size="large" type="primary" class="ml10" @click="gmChange"> </el-card>
修改 <el-card shadow="hover" header="开游戏里的GM">
</el-button> <div class="game-order-search mb15">
</el-form-item> <el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 600px">
</el-form> <el-form-item label="区服">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
</div> <el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-card> <el-select v-model="tableData.querys.serverId" class="w-50 m-2" placeholder="选择区服" size="large" filterable>
<el-card shadow="hover" header="开游戏里的GM"> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" />
<div class="game-order-search mb15"> </el-select>
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 520px"> </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="m-2" placeholder="选择渠道" size="large" style="width: 300px">
<el-select v-model="tableData.querys.state" class="w-50 m-2" placeholder="选择渠道" size="large"> <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>
<el-button size="large" type="primary" class="ml10" @click="setclientgm"> </el-form-item>
修改 </el-form>
</el-button> </div>
</el-form-item> </el-card>
</el-form> </div>
</div>
</el-card>
</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; };
channels: object; servers: object;
gmStates: object; channels: object;
serverSwitch: number; gmStates: object;
serverCategorize: object; serverSwitch: number;
serverCategorize: object;
} }
export default defineComponent({ export default defineComponent({
name: 'apiV1GameManageGm', name: 'apiV1GameManageGm',
setup() { setup() {
const state = reactive<TableDataState>({ const state = reactive<TableDataState>({
serverSwitch: 0, serverSwitch: 0,
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
serverId: "", serverId: '',
gmState: 1, gmState: 1,
total: 0, total: 0,
}, },
tableData: {
querys: {
uids: "",
state: 1,
},
data: {
type: 1,
channel: "",
serverId: "",
account: "",
uid: "",
gmState: 0
},
list: []
},
channels: [],
servers: [],
gmStates: [
{
value: 0,
label: '正常',
},
{
value: 1,
label: '黑名单',
},
],
serverCategorize: ServerCategorize,
});
const gmSearch = () => {
let query = {type: state.tableData.data.type, uid: state.tableData.data.uid};
if (state.tableData.data.type == 2) {
query["account"] = state.tableData.data.channel + state.tableData.data.account;
query["serverId"] = state.tableData.data.serverId;
}
gameGmSearch(query).then((res) => {
ElMessage.success('查询成功');
console.log(res);
state.tableData.data.gmState = res.data.gm
}).finally(() => {
// state.loading = false;
})
}
const gmChange = () => {
let query = {
type: state.tableData.data.type,
uid: state.tableData.data.uid,
gmState: state.tableData.data.gmState
};
if (state.tableData.data.type == 2) {
query["account"] = state.tableData.data.channel + state.tableData.data.account;
query["serverId"] = state.tableData.data.serverId;
}
gameChangeGm(query).then(() => {
ElMessage.success('修改成功');
}).finally(() => {
})
}
const setclientgm = () => {
gameSetclientgm(state.tableData.querys).then(() => { tableData: {
ElMessage.success('修改成功'); querys: {
}).finally(() => { serverId: '',
}) uids: '',
} state: 1,
const gmList = () => { },
gameListGm(state.queryParams).then((res) => { data: {
state.tableData.list = res.data.uids type: 1,
ElMessage.success('获取成功'); channel: '',
}).finally(() => { serverId: '',
}) account: '',
} uid: '',
// gmState: 0,
onMounted(() => { },
serverList().then(res => { list: [],
state.servers = res; },
}) channels: [],
channelList().then(res => { servers: [],
state.channels = res gmStates: [
}) {
}); value: 0,
// label: '正常',
const switchServer = () => { },
return gSwitchServer(state.serverSwitch, state.servers) {
}; value: 1,
return { label: '黑名单',
switchServer, },
gmSearch, {
gmChange, value: 2,
setclientgm, label: 'GM',
gmList, },
...toRefs(state), ],
}; serverCategorize: ServerCategorize,
}, });
const gmSearch = () => {
let query = { type: state.tableData.data.type, uid: state.tableData.data.uid };
if (state.tableData.data.type == 2) {
query['account'] = state.tableData.data.channel + state.tableData.data.account;
query['serverId'] = state.tableData.data.serverId;
}
gameGmSearch(query)
.then((res) => {
ElMessage.success('查询成功');
console.log(res);
state.tableData.data.gmState = res.data.gm;
})
.finally(() => {
// state.loading = false;
});
};
const gmChange = () => {
let query = {
type: state.tableData.data.type,
uid: state.tableData.data.uid,
gmState: state.tableData.data.gmState,
};
if (state.tableData.data.type == 2) {
query['account'] = state.tableData.data.channel + state.tableData.data.account;
query['serverId'] = state.tableData.data.serverId;
}
gameChangeGm(query)
.then(() => {
ElMessage.success('修改成功');
})
.finally(() => {});
};
const setclientgm = () => {
gameSetclientgm(state.tableData.querys)
.then(() => {
ElMessage.success('修改成功');
})
.finally(() => {});
};
const gmList = () => {
gameListGm(state.queryParams)
.then((res) => {
state.tableData.list = res.data.uids;
ElMessage.success('获取成功');
})
.finally(() => {});
};
//
onMounted(() => {
serverList().then((res) => {
state.servers = res;
});
channelList().then((res) => {
state.channels = res;
});
});
//
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
return {
switchServer,
gmSearch,
gmChange,
setclientgm,
gmList,
...toRefs(state),
};
},
}); });
</script> </script>

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>

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

@ -1,449 +1,457 @@
<template> <template>
<div class="game-maintenance-container"> <div class="game-maintenance-container">
<el-card shadow="hover" header="弹窗公告"> <el-card shadow="hover" header="弹窗公告">
<el-form label-width="90px"> <el-form label-width="90px">
<el-form-item label="服务器:" prop="serverId"> <el-form-item label="服务器:" prop="serverId">
<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>
</el-form> </el-form>
<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> <el-form label-width="90px">
<el-form label-width="90px"> <el-form-item>
<el-form-item> <el-select v-model="model" @change="useModel(1)" placeholder="请选择模板" popper-class="custom-header">
<el-select v-model="model" @change="useModel(1)" placeholder="请选择模板" popper-class="custom-header"> <el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id">
<el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id"> {{ item.title }}
{{ item.title }} </el-option>
</el-option> </el-select>
</el-select> <el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button>
<el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button> </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"> <el-button type="primary" @click="showContent" style="margin-left: 20px">内容预览</el-button>
<el-button type="primary" @click="showContent" style="margin-left: 20px">内容预览</el-button> </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" @blur="inputSelect" clearable />
<el-input v-model="tableData.param.content" type="textarea" rows="18" @mouseup="inputSelect" </el-form-item>
@blur="inputSelect" clearable/> <el-form-item>
</el-form-item> <el-button size="large" type="primary" @click="noticePop"> 弹窗公告发送 </el-button>
<el-form-item> </el-form-item>
<el-button size="large" type="primary" @click="noticePop"> </el-form>
弹窗公告发送 </el-card>
</el-button>
</el-form-item>
</el-form>
</el-card>
<el-dialog v-model="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" center> <el-dialog v-model="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" center>
<div class="my-header"> <div class="my-header">
<el-button type="" @click="saveModel(2)">保存</el-button> <el-button type="" @click="saveModel(2)">保存</el-button>
<el-button type="primary" @click="setModel(1)">添加</el-button> <el-button type="primary" @click="setModel(1)">添加</el-button>
</div> </div>
<el-table :data="dbs" :inline="true" :cell-style="{padding:'0'}"> <el-table :data="dbs" :inline="true" :cell-style="{ padding: '0' }">
<el-table-column> <el-table-column>
<template #default="scope"> <template #default="scope">
<div class="flex-warp"> <div class="flex-warp">
{{ scope.row.title }} {{ scope.row.title }}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column width="150"> <el-table-column width="150">
<template #default="scope"> <template #default="scope">
<el-button size="small" type="danger" @click="setModel(3,scope.row.id)" inline="true"></el-button> <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> <el-button size="small" type="primary" @click="setModel(2, scope.row.id)" inline="true"></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-dialog> </el-dialog>
<el-dialog v-model="editModelVisible" :close-on-click-modal="false" center> <el-dialog v-model="editModelVisible" :close-on-click-modal="false" center>
<el-form label-width="90px"> <el-form label-width="90px">
<el-form-item label="模板名称" prop="title"> <el-form-item label="模板名称" prop="title">
<el-input v-model="editModel.title" placeholder="请输入模板名称"/> <el-input v-model="editModel.title" placeholder="请输入模板名称" />
</el-form-item> </el-form-item>
<el-form-item label="模板内容" prop="content"> <el-form-item label="模板内容" prop="content">
<el-input v-model="editModel.content" type="textarea" placeholder="请输入内容" rows="25"/> <el-input v-model="editModel.content" type="textarea" placeholder="请输入内容" rows="25" />
</el-form-item> </el-form-item>
</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>
保存 </div>
</el-button> </template>
</div> </el-dialog>
</template>
</el-dialog>
<el-dialog v-model="contentVisible" :close-on-click-modal="false" center> <el-dialog v-model="contentVisible" :close-on-click-modal="false" center>
<p v-html="tableData.content"></p> <p v-html="tableData.content"></p>
</el-dialog> </el-dialog>
</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 {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, };
listModelVisible: boolean, editModelVisible: boolean;
contentVisible: boolean, listModelVisible: boolean;
serverSwitch: number, contentVisible: boolean;
serverCategorize: object[], serverSwitch: number;
serverCategorize: object[];
} }
export default defineComponent({ export default defineComponent({
name: 'apiV1GameNoticePop', name: 'apiV1GameNoticePop',
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: '',
popType: 0, uids: '',
popTo: 1, popType: 0,
noticeId: 0 popTo: 1,
}, noticeId: 0,
}, },
dbs: [], },
servers: [], dbs: [],
model: "", servers: [],
editModel: {}, model: '',
serverCategorize: ServerCategorize, editModel: {},
}); serverCategorize: ServerCategorize,
const noticePop = () => { });
console.log("Notice: ", state.tableData.param); const noticePop = () => {
gameNoticePop(state.tableData.param).then(() => { for (let i in state.tableData.param.servers) {
ElMessage.success('发送成功'); let data = {
}).finally(() => { serverId: state.tableData.param.servers[i],
// state.loading = false; content: state.tableData.param.content,
}) uids: state.tableData.param.uids,
}; popType: state.tableData.param.popType,
onMounted(() => { popTo: state.tableData.param.popTo,
serverList().then(value => { noticeId: state.tableData.param.noticeId,
state.servers = value; };
// console.log(" server : ", state.servers); console.log('Notice: ', data);
}); gameNoticePop(data).then(() => {
getModel(); ElMessage.success(data.serverId + '发送成功');
}); }).finally(() => {
var inputSelect = (res: any) => { // state.loading = false;
console.log(res, res.target.selectionStart, res.target.selectionEnd); });
let selectionStart = res.target.selectionStart; }
let selectionEnd = res.target.selectionEnd; };
state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)]; onMounted(() => {
if (selectionStart == selectionEnd) { serverList().then((value) => {
console.log("same"); state.servers = value;
state.selected = '替换显示内容'; // console.log(" server : ", state.servers);
return });
} getModel();
state.selected = res.target.value.slice(selectionStart, selectionEnd); });
console.log(state.selected); var inputSelect = (res: any) => {
}; console.log(res, res.target.selectionStart, res.target.selectionEnd);
var changeContent = () => { let selectionStart = res.target.selectionStart;
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1]; let selectionEnd = res.target.selectionEnd;
}; state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)];
var inputBig = () => { if (selectionStart == selectionEnd) {
if (state.unselsected[1].indexOf("[/b]") == 0) { console.log('same');
return state.selected = '替换显示内容';
} return;
}
state.selected = res.target.value.slice(selectionStart, selectionEnd);
console.log(state.selected);
};
var changeContent = () => {
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1];
};
var inputBig = () => {
if (state.unselsected[1].indexOf('[/b]') == 0) {
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;
} }
ElMessageBox.prompt('请输入Url', '提示', { ElMessageBox.prompt('请输入Url', '提示', {
confirmButtonText: '确认', confirmButtonText: '确认',
cancelButtonText: '取消', cancelButtonText: '取消',
// inputPattern: // inputPattern:
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/, // /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/,
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){ // state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, "");
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); // changeContent();
// changeContent(); // }
// } };
}; 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); };
}; //
// const getModel = () => {
const getModel = () => { gameGMNoticeModelGet({ noticeType: 1 }).then((res) => {
gameGMNoticeModelGet({noticeType: 1}).then((res) => { console.log(res);
console.log(res); 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; }
} };
}; const makeModel = () => {
const makeModel = () => { state.listModelVisible = true;
state.listModelVisible = true; console.log(state);
console.log(state); };
}; const setModel = (type: number, id: number) => {
const setModel = (type: number, id: number) => { switch (type) {
switch (type) { case 1:
case 1: 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: // state.dbs = state.dbs.filter(model => model.id != id);
// state.dbs = state.dbs.filter(model => model.id != id); // for (let i = 0; i < state.dbs.length; i++) {
// for (let i = 0; i < state.dbs.length; i++) { // let model = state.dbs[i];
// let model = state.dbs[i]; // if (model) {
// if (model) { // model.id = i + 1;
// model.id = i + 1; // }
// } // }
// } gameGMNoticeModelDel({
gameGMNoticeModelDel({ id: id,
id: id, })
}).then(function () { .then(function () {
getModel() getModel();
}).finally(function () { })
}); .finally(function () {});
break; break;
} }
}; };
const saveModel = (type: number) => { const saveModel = (type: number) => {
console.log(type, state.editModel); console.log(type, state.editModel);
switch (type) { switch (type) {
case 1: case 1:
gameGMNoticeModelAdd({ gameGMNoticeModelAdd({
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();
state.editModelVisible = false; })
}); .finally(function () {
break; state.editModelVisible = false;
case 2: });
state.listModelVisible = false; break;
// gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){ case 2:
// }).finally(function(){ state.listModelVisible = false;
// state.listModelVisible = false; // gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){
// }); // }).finally(function(){
break; // state.listModelVisible = false;
} // });
}; break;
const handleClose = (done: () => void) => { }
// ElMessageBox.confirm('退').then(() => { };
done() const handleClose = (done: () => void) => {
// }).catch(() => { // ElMessageBox.confirm('退').then(() => {
// // catch error done();
// }) // }).catch(() => {
}; // // catch error
const showContent = () => { // })
state.contentVisible = true; };
state.tableData.content = contentReplace(state.tableData.param.content); const showContent = () => {
console.log(state.tableData.content) state.contentVisible = true;
}; state.tableData.content = contentReplace(state.tableData.param.content);
const switchServer = () => { console.log(state.tableData.content);
return gSwitchServer(state.serverSwitch, state.servers) };
}; const switchServer = () => {
return { return gSwitchServer(state.serverSwitch, state.servers);
switchServer, };
showContent, return {
noticePop, switchServer,
inputSelect, showContent,
inputBig, noticePop,
inputItalic, inputSelect,
inputUnderline, inputBig,
inputLink, inputItalic,
inputColor, inputUnderline,
buttonColor, inputLink,
getModel, inputColor,
useModel, buttonColor,
makeModel, getModel,
setModel, useModel,
saveModel, makeModel,
handleClose, setModel,
...toRefs(state), saveModel,
}; handleClose,
}, ...toRefs(state),
};
},
}); });
</script> </script>
<style scoped lang="scss" src="../../../theme/add.scss"></style> <style scoped lang="scss" src="../../../theme/add.scss"></style>
<style scoped lang="scss"> <style scoped lang="scss">
.my-header { .my-header {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
gap: 16px; gap: 16px;
} }
.tree-border { .tree-border {
margin-top: 5px; margin-top: 5px;
border: 1px solid #e5e6e7 !important; border: 1px solid #e5e6e7 !important;
background: #fff none !important; background: #fff none !important;
border-radius: 4px; border-radius: 4px;
} }
.system-edit-post-container { .system-edit-post-container {
.menu-data-tree { .menu-data-tree {
border: var(--el-input-border, var(--el-border-base)); border: var(--el-input-border, var(--el-border-base));
border-radius: var(--el-input-border-radius, var(--el-border-radius-base)); border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
padding: 5px; padding: 5px;
} }
} }
.el-form--inline .el-form-item { .el-form--inline .el-form-item {
display: -moz-flex; display: -moz-flex;
vertical-align: middle; vertical-align: middle;
margin-right: 32px; margin-right: 32px;
} }
</style> </style>

26
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">
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> <div>
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> <el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px">
</el-select> <el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> </el-select>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" /> <el-select v-model="tableData.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
</el-select> <el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" />
</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>
@ -63,7 +65,7 @@
<el-radio v-model="tableData.paramDeposit.count" :label="1">统计</el-radio> <el-radio v-model="tableData.paramDeposit.count" :label="1">统计</el-radio>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" class="ml10" @click="deposit"> 确认充值 </el-button> <el-button type="primary" class="ml10" @click="deposit"> 确认充值</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
@ -199,9 +201,9 @@ 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 {
switchServer, switchServer,

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 {

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

@ -1,187 +1,196 @@
<template> <template>
<div class="game-online-container"> <div class="game-online-container">
<el-card shadow="hover"> <el-card shadow="hover">
<div class="system-user-search mb15"> <div class="system-user-search mb15">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="选择服务器" prop="serverId"> <el-form-item label="选择服务器" prop="serverId">
<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.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>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="default" type="primary" class="ml10" @click="onlineList"> <el-button size="default" type="primary" class="ml10" @click="onlineList">
<el-icon> <el-icon>
<ele-Search/> <ele-Search />
</el-icon> </el-icon>
查询 查询
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<div v-if="!tableData.param.serverId"> <div v-if="!tableData.param.serverId">
<div class="system-user-search mb15"> <div class="system-user-search mb15">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="总在线数量" prop="serverId"> <el-form-item label="总在线数量" prop="serverId">
{{ tableData.TotalNumber }} {{ tableData.TotalNumber }}
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<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 label="在线数量">
</el-form-item> {{ tableData.Numbers[k] || 0 }}
<el-form-item label="在线数量"> </el-form-item>
{{ tableData.Numbers[k] || 0 }} <el-form-item label="最高在线数量">
</el-form-item> {{ num }}
<el-form-item label="最高在线数量"> </el-form-item>
{{ num }} </el-form>
</el-form-item> </div>
</el-form> </div>
</div> </div>
</div> <div v-else>
</div> <div class="system-user-search mb15">
<div v-else> <el-form :inline="true">
<div class="system-user-search mb15"> <el-form-item label="在线数量">
<el-form :inline="true"> {{ tableData.Number }}
<el-form-item label="在线数量"> </el-form-item>
{{ tableData.Number }} <el-form-item label="最高在线数量">
</el-form-item> {{ tableData.topNumbers[tableData.param.serverId] || 0 }}
<el-form-item label="最高在线数量"> </el-form-item>
{{ tableData.topNumbers[tableData.param.serverId] || 0 }} </el-form>
</el-form-item> </div>
</el-form> <el-table :data="tableData.data" style="width: 100%">
</div> <el-table-column type="index" label="序号" width="60" />
<el-table :data="tableData.data" style="width: 100%"> <!-- <el-table-column prop="connectId" label="连接服务器" show-overflow-tooltip></el-table-column>-->
<el-table-column type="index" label="序号" width="60"/> <el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column>
<!-- <el-table-column prop="connectId" label="连接服务器" show-overflow-tooltip></el-table-column>--> <el-table-column prop="Account" label="UniqueId" show-overflow-tooltip></el-table-column>
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>-->
<el-table-column prop="Account" label="UniqueId" show-overflow-tooltip></el-table-column> <!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>-->
<!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>--> </el-table>
<!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>--> <el-pagination
</el-table> :hide-on-single-page="true"
<el-pagination :hide-on-single-page="true" v-show="tableData.total>0" :total="tableData.total" v-show="tableData.total > 0"
v-model:page-size="tableData.param.pageNum" :total="tableData.total"
v-model:current-page="tableData.param.pageSize" v-model:page-size="tableData.param.pageNum"
@pagination="onlineList" v-model:current-page="tableData.param.pageSize"
/> @pagination="onlineList"
</div> />
</el-card> </div>
</div> </el-card>
</div>
</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 {
connectId: number; connectId: number;
uid: number; uid: number;
address: string; address: string;
loginTime: string; loginTime: string;
} }
interface TableDataState { interface TableDataState {
serverSwitch: number; serverSwitch: number;
tableData: { tableData: {
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;
serverCategorize: object[]; servers: object[];
serverCategorize: object[];
} }
export default defineComponent({ export default defineComponent({
name: 'apiV1GameRoleOnline', name: 'apiV1GameRoleOnline',
setup() { setup() {
const state = reactive<TableDataState>({ const state = reactive<TableDataState>({
serverSwitch: 0, serverSwitch: 0,
tableData: { tableData: {
data: [], data: [],
param: { param: {
serverId: "" serverId: '',
}, },
Numbers: {}, Numbers: {},
topNumbers: {}, topNumbers: {},
TotalNumber: 0, TotalNumber: 0,
Number: 0, Number: 0,
topNumber: 0, topNumber: 0,
total: 0, total: 0,
}, },
servers: ServerList, topOnlineCount: 0,
serverCategorize: ServerCategorize servers: ServerList,
}); serverCategorize: ServerCategorize,
const onlineList = () => { });
// const data: Array<any> = []; const onlineList = () => {
state.tableData.TotalNumber = 0; // const data: Array<any> = [];
if (state.tableData.param.serverId == "") { state.tableData.TotalNumber = 0;
for (let server in state.servers) { if (state.tableData.param.serverId == '') {
onlines(state.servers[server].id) for (let server in state.servers) {
} onlines(state.servers[server].id);
} else { }
const data: Array<any> = []; } else {
gameOnlineList(state.tableData.param).then(res => { const data: Array<any> = [];
console.log(res.data); gameOnlineList(state.tableData.param).then((res) => {
const list = res.data.onlines ?? []; console.log(res.data);
state.tableData.Number = res.data.total; const list = res.data.onlines ?? [];
list.map((item: any) => { state.tableData.Number = res.data.total;
data.push({ list.map((item: any) => {
uid: item.id, data.push({
Account: item.uid, uid: item.id,
}); Account: item.uid,
}); });
state.tableData.data = data; });
}); state.tableData.data = data;
} });
gameOnlineTopList(state.tableData.param).then(res => { }
console.log(res.data); if (state.topOnlineCount == 0) {
const list = res.data.onlines ?? []; state.topOnlineCount = 1;
for (let i in list) { setTimeout(function () {
state.tableData.topNumbers[list[i].server] = list[i].num; state.topOnlineCount = 0;
} }, 30000);
}) gameOnlineTopList(state.tableData.param).then((res) => {
}; console.log("gameOnlineTopList: ", res.data);
const onlines = (server: number) => { const list = res.data.onlines ?? [];
if (!server) { for (let i in list) {
return; state.tableData.topNumbers[list[i].server] = list[i].num;
} }
gameOnlineList({serverId: server}).then(res => { });
console.log(res.data); }
state.tableData.Numbers[server] = res.data.total; };
state.tableData.TotalNumber += res.data.total; const onlines = (server: number) => {
}); if (!server) {
}; return;
// }
onMounted(() => { gameOnlineList({ serverId: server }).then((res) => {
allServerList().then(res => { console.log('server: ', server, ' data: ', res.data);
// console.log(res); state.tableData.Numbers[server] = res.data.total;
state.servers = res; state.tableData.TotalNumber += res.data.total;
}) });
}); };
const switchServer = () => { //
return gSwitchServer(state.serverSwitch, state.servers) onMounted(() => {
}; allServerList().then((res) => {
return { // console.log(res);
switchServer, state.servers = res;
onlineList, });
...toRefs(state), });
}; const switchServer = () => {
}, return gSwitchServer(state.serverSwitch, state.servers);
};
return {
switchServer,
onlineList,
...toRefs(state),
};
},
}); });
</script> </script>

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>

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

@ -1,156 +1,185 @@
<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> <el-form-item label="选择设置模式">
<el-button type="primary" @click="onOpenAdd()"> <el-select v-model="tableData.param.name" class="m-2" @change="changeName" placeholder="选择设置模式" filterable>
<el-icon> <el-option v-for="item in names" :key="item" :label="item.label" :value="item.value" />
<ele-FolderAdd/> </el-select>
</el-icon> </el-form-item>
新增 <el-form-item>
</el-button> <el-button type="primary" @click="onOpenAdd()">
</el-form-item> <el-icon>
</el-form> <ele-FolderAdd />
<el-table :data="tableData.data" style="width: 100%"> </el-icon>
<el-table-column prop="label" label="渠道" width="200"> 新增
<template #default="scope"> </el-button>
{{ 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)}} </el-form-item>
</template> </el-form>
</el-table-column> <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">
{{ scope.row.label.substring(12) }} <div v-if="scope.row.label.length >= 12">
</template> {{
</el-table-column> channels.find((r) => r.value == scope.row.label.substring(0, 12))
<el-table-column prop="value" label="审核模式" show-overflow-tooltip width="100"> ? channels.find((r) => r.value == scope.row.label.substring(0, 12)).label
<template #default="scope"> : scope.row.label.substring(0, 12)
<div v-if="scope.row.value==0"></div> }}
<div v-if="scope.row.value==1"></div> </div>
</template> <div v-if="scope.row.label.length < 12">
</el-table-column> {{ channels.find((r) => r.value == '') ? channels.find((r) => r.value == '').label : '' }}
<el-table-column prop="value" label="操作" show-overflow-tooltip width="100"> </div>
<template #default="scope"> </template>
<el-button size="small" type="text" @click="onRowDel(scope.row)">删除 </el-table-column>
</el-button> <el-table-column prop="label" label="版本号" width="200">
<el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改 <template #default="scope">
</el-button> <div v-if="scope.row.label.length > 12">
</template> {{ scope.row.label.substring(12) }}
</el-table-column> </div>
</el-table> <div v-if="scope.row.label.length < 12">{{ scope.row.label }}</div>
</el-card> <div v-else>所有版本</div>
<EditConfig ref="editDicRef" @mailList="mailList"/> </template>
</div> </el-table-column>
<el-table-column prop="value" :label="setName.label + '模式'" show-overflow-tooltip width="200">
<template #default="scope">
<div v-if="scope.row.value == 0"></div>
<div v-if="scope.row.value == 1"></div>
</template>
</el-table-column>
<el-table-column prop="value" label="操作" show-overflow-tooltip width="100">
<template #default="scope">
<el-button size="small" type="text" @click="onRowDel(scope.row)">删除</el-button>
<el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<EditConfig ref="editDicRef" @mailList="mailList" />
</div>
</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;
ItemConfig: object; ItemConfig: object;
tableData: { tableData: {
data: object[]; data: object[];
total: number; total: number;
content: string; content: string;
param: {}; param: {};
}; name: string;
servers: object[] };
channels: object[] servers: object[];
channels: object[];
setName: object;
names: object[];
} }
export default defineComponent({ export default defineComponent({
name: 'apiV1ClientBugList', name: 'apiV1ClientBugList',
components: {EditConfig}, components: { EditConfig },
setup() { setup() {
const editDicRef = ref(); const editDicRef = ref();
const state = reactive<TableDataState>({ const state = reactive<TableDataState>({
contentVisible: false, contentVisible: false,
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) {
let data = res.data.list ?? []; let data = res.data.list ?? [];
for (let i in data) { for (let i in data) {
console.log(data[i], i); console.log(data[i], i);
state.tableData.data.push({ state.tableData.data.push({
label: i, label: i,
value: data[i], value: data[i],
}) });
} }
} }
}) });
}; };
// //
const onHandleCurrentChange = () => { const onHandleCurrentChange = () => {
console.log(`current page: ${state.tableData.param.pageNum}`); console.log(`current page: ${state.tableData.param.pageNum}`);
mailList(); mailList();
}; };
const onRowDel = (row: any) => { const onRowDel = (row: any) => {
ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', { ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', {
confirmButtonText: '确认', confirmButtonText: '确认',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning', type: 'warning',
}).then(() => { })
gameDelAuditMode({label: row.label}).then(() => { .then(() => {
ElMessage.success('完成bug成功'); gameDelAuditMode({ label: row.label }).then(() => {
mailList(); ElMessage.success('完成bug成功');
}) 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 = () => {
// editDicRef.value.openDialog({ auditMode: '1', channel: '', version: '', name: state.tableData.param.name }, state.setName, true);
const onOpenAdd = () => { };
editDicRef.value.openDialog({auditMode: "1", channel: "", version: ""}); //
}; const onOpenEdit = (row: any) => {
// let data = { auditMode: row.value, channel: '', version: '', name: state.tableData.param.name };
const onOpenEdit = (row: any) => { if (row.label.length > 12) {
let data = {auditMode: row.value, channel: "", version: ""} data.channel = row.label.substring(0, 12);
if (row.label.length > 12) { data.version = row.label.substring(12);
data.channel = row.label.substring(0, 12); } else if (row.label.length == 12) {
data.version = row.label.substring(12); data.channel = row.label;
} else if (row.label.length == 12) { } else if (row.label.length < 12) {
data.channel = row.label; data.version = row.label;
} }
editDicRef.value.openDialog(data); editDicRef.value.openDialog(data, state.setName, false);
}; };
return { const changeName = () => {
editDicRef, state.setName = state.names.find((r) => r.value === state.tableData.param.name);
onHandleCurrentChange, mailList();
onRowDel, };
mailList, return {
onOpenAdd, editDicRef,
onOpenEdit, onHandleCurrentChange,
...toRefs(state), onRowDel,
}; mailList,
}, onOpenAdd,
onOpenEdit,
changeName,
...toRefs(state),
};
},
}); });
</script> </script>

Loading…
Cancel
Save