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,
});
}
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,
label: '其他',
}
},
];
export const GameSetList = [
{ value: 'enableHotfix', label: '是否开启热更' },
{ value: 'enableAccountLogin', label: '是否开启账密' },
{ value: 'loginUrlChannelList', label: '登录类别检索' },
];
export async function channelList(): Promise<object[]> {
@ -328,7 +334,7 @@ export async function serverList(): Promise<object[]> {
data.data.loginUrlList.forEach((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 ?? [];
}
@ -337,7 +343,7 @@ export async function allServerList(): Promise<object[]> {
data.data.loginUrlList.forEach((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 [
{
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>
<div>
<el-dialog title="添加参数" v-model="isShowDialog" width="769px">
<el-form label-width="90px" label-position="right">
<el-form-item label="选择渠道" prop="serverId">
<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-select>
</el-form-item>
<el-form-item label="有效时间" prop="dates">
<el-date-picker style="width: 400px" range-separator="-" type="datetimerange" v-model="queryParams.dates"
start-placeholder="开始" end-placeholder="结束" value-format="YYYY-MM-DD HH:mm:ss"/>
</el-form-item>
<el-form-item 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>
<template #footer>
<div>
<el-dialog title="添加参数" v-model="isShowDialog" width="769px">
<el-form label-width="90px" label-position="right">
<el-form-item label="选择渠道" prop="serverId">
<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-select>
</el-form-item>
<el-form-item label="有效时间" prop="dates">
<el-date-picker
style="width: 400px"
range-separator="-"
type="datetimerange"
v-model="queryParams.dates"
start-placeholder="开始"
end-placeholder="结束"
value-format="YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item 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">
<el-button @click="onCancel" size="default"> </el-button>
<el-button size="default" type="primary" class="ml10" @click="addItem">
<el-icon>
<ele-EditPen/>
</el-icon>
修改
</el-button>
<el-button size="default" type="primary" class="ml10" @click="update">
<el-icon>
<ele-EditPen />
</el-icon>
修改
</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
</el-dialog>
</div>
</template>
<script lang="ts">
import {reactive, toRefs, defineComponent} from 'vue';
import {ElLoading} from "element-plus";
import {updateGiftExchange} from "/@/api/game";
import {allChannelList} from "/@/utils/game";
import { reactive, toRefs, defineComponent } from 'vue';
import { ElLoading, ElMessage } from 'element-plus';
import { updateGiftExchange } from '/@/api/game';
import { allChannelList } from '/@/utils/game';
import AllItemConfigCategory from '/@/api/config/AllItemConfigCategory.json';
interface TableDataState {
isShowDialog: boolean,
queryParams: object;
channels: object[];
isShowDialog: boolean;
queryParams: object;
channels: object[];
ItemConfig: object[];
}
export default defineComponent({
name: 'systemEditDicData',
setup(prop, {emit}) {
const state = reactive<TableDataState>({
isShowDialog: false,
queryParams: {},
channels: [],
});
name: 'systemEditDicData',
setup(prop, { emit }) {
const state = reactive<TableDataState>({
isShowDialog: false,
queryParams: {},
channels: [],
ItemConfig: AllItemConfigCategory,
});
//
const openDialog = (row: any | null) => {
state.isShowDialog = true;
state.queryParams = row || {};
allChannelList().then(res => {
state.channels = res;
})
};
//
const openDialog = (row: any | null) => {
state.isShowDialog = true;
state.queryParams = row || {};
state.queryParams.awards = state.queryParams.rewards;
allChannelList().then((res) => {
state.channels = res;
});
};
//
const closeDialog = () => {
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
//
const addItem = () => {
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
});
let data = {}
data["startTime"] = state.queryParams.dates[0]
data["stopTime"] = state.queryParams.dates[1]
data["configId"] = state.queryParams.id
data["channel"] = state.queryParams.channel
data["times"] = state.queryParams.times
console.log(state.queryParams, data);
updateGiftExchange(data).then((res) => {
console.log(res);
}).finally(function () {
loading.close();
emit('countList')
closeDialog();
});
};
return {
openDialog,
closeDialog,
onCancel,
addItem,
...toRefs(state),
};
},
//
const closeDialog = () => {
state.isShowDialog = false;
};
//
const onCancel = () => {
closeDialog();
};
//
const update = () => {
const loading = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
});
let data = {};
let msg = stateAward();
if (msg) {
ElMessage.error(msg);
loading.close();
return;
}
data['startTime'] = state.queryParams.dates[0];
data['stopTime'] = state.queryParams.dates[1];
data['configId'] = state.queryParams.id;
data['channel'] = state.queryParams.channel;
data['times'] = state.queryParams.times;
data['awards'] = state.queryParams.awards;
console.log(state.queryParams, data);
updateGiftExchange(data)
.then((res) => {
console.log(res);
})
.finally(function () {
loading.close();
emit('countList');
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>

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

@ -46,6 +46,8 @@
</el-form>
</div>
<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">
<template #default="scope">
<div v-if="scope.row.type==1">一码多用</div>

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

@ -72,7 +72,7 @@
<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.Name" :value="item.Id"/>
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id+' '+item.DetailsPageName" :value="item.Id"/>
</el-select>
</div>
<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-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-column prop="id" label="ID" width="60">
<template #default="scope">

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

@ -5,9 +5,10 @@
<el-form class="flex-warp" label-position="right">
<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-column prop="id" label="ID" width="60"/>
<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">
<template #default="scope">
<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>
</template>
</el-table-column>

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

@ -23,7 +23,7 @@
<el-form-item label="附件:">
<div v-if="tableData.param.type===1">
<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 v-else>无附件</div>

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

@ -106,7 +106,7 @@
<template #default="scope">
<div class="flex-warp">
<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"/>
</el-select>
</div>
@ -216,7 +216,7 @@
<template #default="scope">
<div class="flex-warp">
<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"/>
</el-select>
</div>
@ -254,7 +254,7 @@
</template>
<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 EditConfig from '/@/views/gameMail/send/component/editConfig.vue';
import {ServerCategorize, serverList} from "/@/utils/game";

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

@ -16,25 +16,25 @@
</template>
<div v-show="item.copyShow">
<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-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item>
<!-- <el-form-item label="原账号服务器">-->
<!-- <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-select>-->
<!-- </el-form-item>-->
<el-form-item label="原账号服务器" prop="SrcServer">
<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.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-select>
</el-form-item>
<!-- <el-form-item label="原账号服务器">-->
<!-- <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-select>-->
<!-- </el-form-item>-->
<el-form-item label="原账号服务器" prop="SrcServer">
<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.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-select>
</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-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled" :loading="loading">
@ -69,7 +69,7 @@
</template>
<div v-show="item.copyShow">
<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
class="upload-demo"
:action="baseURL + 'api/v1/pub/upload/singleFile'"
@ -86,13 +86,13 @@
<div slot="tip" class="el-upload__tip">只能上传Json文件</div>
</el-upload>
<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-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
</el-form-item>
<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-select>
<!-- <el-input v-model="tableData.data.filename" placeholder="请填写filename" class="w-50 m-2" clearable/>-->
@ -100,21 +100,21 @@
<el-form-item label="目标账号">
<el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable />
</el-form-item>
<el-form-item label="目标服务器" prop="DestServer">
<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.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-select>
</el-form-item>
<el-form-item label="目标服务器" prop="DestServer">
<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.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-select>
</el-form-item>
<!-- <el-form-item label="目标服务器">-->
<!-- <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-select>-->
<!-- </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>
</div>
@ -136,7 +136,7 @@
</template>
<div v-show="item.delShow">
<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-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable />
</el-form-item>
@ -149,7 +149,7 @@
</el-select>
</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>
</div>
@ -170,7 +170,7 @@
</el-button>
</template>
<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-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large" clearable />
</el-form-item>
@ -186,7 +186,7 @@
<el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large" clearable />
</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>
</div>
@ -230,14 +230,7 @@
<script lang="ts">
import { toRefs, reactive, onMounted, defineComponent, warn } from 'vue';
import {
gameGMClearResource,
gameGMCopyUnit,
gameGMUpdateUnit,
gameGMDelAccount,
gameResetPwd,
giftExchangeExists,
} from '/@/api/game';
import { gameGMClearResource, gameGMCopyUnit, gameGMUpdateUnit, gameGMDelAccount, gameResetPwd, giftExchangeExists } from '/@/api/game';
import { AllServerList, ServerCategorize, serverList } from '/@/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus/es';
import { gSwitchServer } from '/@/utils/utils';
@ -352,7 +345,8 @@ export default defineComponent({
gameGMCopyUnit({
SrcName: state.tableData.data.SrcName,
SrcServer: state.tableData.data.SrcServer,
}).then((res) => {
})
.then((res) => {
ElMessage.success('修改成功');
console.log('copy: ', res);
state.tableData.data.filename = res.data.filename;

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

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

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

@ -72,150 +72,6 @@
</div>
</template>
</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>
</div>
</el-card>

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

@ -99,7 +99,7 @@
<template #default="scope">
<div class="flex-warp">
<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"/>
</el-select>
<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 prop="ItemId" label="物品">
<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>
<span v-show="check&&!model.ItemId" style="color: red">*</span>
</el-form-item>

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

@ -93,7 +93,7 @@
<el-table-column label="物品名称" width="150">
<template #default="scope">
<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"/>
</el-select>
<span v-show="check&&!Number(scope.row.id)" style="color: red">*</span>
@ -238,7 +238,7 @@
:cell-style="{padding:1+'px'}">
<el-table-column label="物品名称">
<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>
</el-table-column>
<el-table-column label="物品数量区间(min;max)" width="200">
@ -376,7 +376,7 @@
<el-table-column label="物品名称" width="150">
<template #default="scope">
<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"/>
</el-select>
</template>

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

@ -249,7 +249,7 @@
<el-table-column prop="ItemId" label="物品">
<template #default="scope">
<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>
<span v-show="check&&!scope.row.Id" style="color: red">*</span>
</template>
@ -970,7 +970,7 @@
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) +
`;价格:` + (stall.Prices && stall.Prices[0]) + `-` + (stall.Prices && stall.Prices[1]) +
`元;数量:` + stall.ItemNum +

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

@ -184,7 +184,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.first.one.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"/>
</el-select>
</el-form-item>
@ -202,7 +202,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.first.two.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"/>
</el-select>
</el-form-item>
@ -220,7 +220,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.first.three.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"/>
</el-select>
</el-form-item>
@ -256,7 +256,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.first.five.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"/>
</el-select>
</el-form-item>
@ -274,7 +274,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.first.six.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"/>
</el-select>
</el-form-item>
@ -297,7 +297,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.second.one.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"/>
</el-select>
</el-form-item>
@ -315,7 +315,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.second.two.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"/>
</el-select>
</el-form-item>
@ -333,7 +333,7 @@
</template>
<el-select size="default" class="left-block" v-model="monthly.second.three.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"/>
</el-select>
</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>
<div class="game-maintenance-container">
<el-card shadow="hover" header="弹窗公告">
<el-form label-width="90px">
<el-form-item label="服务器:" prop="serverId">
<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.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-select>
</el-form-item>
</el-form>
<el-form label-width="90px">
<el-form-item label="类型:" style="width: 25%">
<el-radio-group v-model="tableData.param.popType">
<el-radio :label=1>普通弹窗</el-radio>
<el-radio :label=2>强制退到登录</el-radio>
<el-radio :label=3>强制退到公告</el-radio>
<el-radio :label=6>滚动公告</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<el-form label-width="90px" :inline="true">
<el-form-item label="发送对象:" style="width: 25%">
<el-radio-group v-model="tableData.param.popTo">
<el-radio :label=1>全部玩家</el-radio>
<el-radio :label=2>部分玩家</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item style="width: 50%">
<el-tooltip content="uid之间用分号(;)隔开">
<el-input v-show="tableData.param.popTo==2" v-model="tableData.param.uids" placeholder="玩家uid"
clearable/>
</el-tooltip>
</el-form-item>
</el-form>
<el-form label-width="90px">
<el-form-item>
<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">
{{ item.title }}
</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="18" @mouseup="inputSelect"
@blur="inputSelect" clearable/>
</el-form-item>
<el-form-item>
<el-button size="large" type="primary" @click="noticePop">
弹窗公告发送
</el-button>
</el-form-item>
</el-form>
</el-card>
<div class="game-maintenance-container">
<el-card shadow="hover" header="弹窗公告">
<el-form label-width="90px">
<el-form-item label="服务器:" prop="serverId">
<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.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-select>
</el-form-item>
</el-form>
<el-form label-width="90px">
<el-form-item label="类型:" style="width: 25%">
<el-radio-group v-model="tableData.param.popType">
<el-radio :label="1">普通弹窗</el-radio>
<el-radio :label="2">强制退到登录</el-radio>
<el-radio :label="3">强制退到公告</el-radio>
<el-radio :label="6">滚动公告</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<el-form label-width="90px" :inline="true">
<el-form-item label="发送对象:" style="width: 25%">
<el-radio-group v-model="tableData.param.popTo">
<el-radio :label="1">全部玩家</el-radio>
<el-radio :label="2">部分玩家</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item style="width: 50%">
<el-tooltip content="uid之间用分号(;)隔开">
<el-input v-show="tableData.param.popTo == 2" v-model="tableData.param.uids" placeholder="玩家uid" clearable />
</el-tooltip>
</el-form-item>
</el-form>
<el-form label-width="90px">
<el-form-item>
<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">
{{ item.title }}
</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="18" @mouseup="inputSelect" @blur="inputSelect" clearable />
</el-form-item>
<el-form-item>
<el-button size="large" type="primary" @click="noticePop"> 弹窗公告发送 </el-button>
</el-form-item>
</el-form>
</el-card>
<el-dialog v-model="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" 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="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" 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="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="contentVisible" :close-on-click-modal="false" center>
<p v-html="tableData.content"></p>
</el-dialog>
</div>
<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 {ElMessageBox, ElMessage} from 'element-plus';
import {gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel} from "/@/api/game";
import {contentReplace, gSwitchServer} from "/@/utils/utils";
import {ServerCategorize, serverList} from "/@/utils/game";
import { toRefs, reactive, onMounted, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel } from '/@/api/game';
import { contentReplace, gSwitchServer } from '/@/utils/utils';
import { ServerCategorize, serverList } from '/@/utils/game';
interface TableDataState {
unselsected: string[]
colorPicker: boolean
color: string
selected: string
urlLink: string
dbs: object[]
servers: object[]
model: number
editModel: object
tableData: {
content: string,
param: {
serverId: number
content: string
popType: number
popTo: number
uids: string
noticeId: number
};
};
editModelVisible: boolean,
listModelVisible: boolean,
contentVisible: boolean,
serverSwitch: number,
serverCategorize: object[],
unselsected: string[];
colorPicker: boolean;
color: string;
selected: string;
urlLink: string;
dbs: object[];
servers: object[];
model: number;
editModel: object;
tableData: {
content: string;
param: {
servers: object;
serverId: number;
content: string;
popType: number;
popTo: number;
uids: string;
noticeId: number;
};
};
editModelVisible: boolean;
listModelVisible: boolean;
contentVisible: boolean;
serverSwitch: number;
serverCategorize: object[];
}
export default defineComponent({
name: 'apiV1GameNoticePop',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
unselsected: ["", ""],
colorPicker: false,
editModelVisible: false,
listModelVisible: false,
contentVisible: false,
color: "#000000",
selected: "替换显示内容",
urlLink: "",
tableData: {
content: "",
param: {
serverId: "",
content: "",
uids: "",
popType: 0,
popTo: 1,
noticeId: 0
},
},
dbs: [],
servers: [],
model: "",
editModel: {},
serverCategorize: ServerCategorize,
});
const noticePop = () => {
console.log("Notice: ", state.tableData.param);
gameNoticePop(state.tableData.param).then(() => {
ElMessage.success('发送成功');
}).finally(() => {
// state.loading = false;
})
};
onMounted(() => {
serverList().then(value => {
state.servers = value;
// console.log(" server : ", state.servers);
});
getModel();
});
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 = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.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 = () => {
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1];
};
var inputBig = () => {
if (state.unselsected[1].indexOf("[/b]") == 0) {
return
}
name: 'apiV1GameNoticePop',
setup() {
const state = reactive<TableDataState>({
serverSwitch: 0,
unselsected: ['', ''],
colorPicker: false,
editModelVisible: false,
listModelVisible: false,
contentVisible: false,
color: '#000000',
selected: '替换显示内容',
urlLink: '',
tableData: {
content: '',
param: {
servers: [],
serverId: '',
content: '',
uids: '',
popType: 0,
popTo: 1,
noticeId: 0,
},
},
dbs: [],
servers: [],
model: '',
editModel: {},
serverCategorize: ServerCategorize,
});
const noticePop = () => {
for (let i in state.tableData.param.servers) {
let data = {
serverId: state.tableData.param.servers[i],
content: state.tableData.param.content,
uids: state.tableData.param.uids,
popType: state.tableData.param.popType,
popTo: state.tableData.param.popTo,
noticeId: state.tableData.param.noticeId,
};
console.log('Notice: ', data);
gameNoticePop(data).then(() => {
ElMessage.success(data.serverId + '发送成功');
}).finally(() => {
// state.loading = false;
});
}
};
onMounted(() => {
serverList().then((value) => {
state.servers = value;
// console.log(" server : ", state.servers);
});
getModel();
});
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 = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.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 = () => {
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) {
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, "");
changeContent();
return;
}
state.selected = "[b]" + state.selected + "[/b]";
changeContent();
console.log(state.unselsected, state.selected.indexOf("[b]"), state.selected, state.tableData.param.content);
};
var inputItalic = () => {
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();
return;
}
state.selected = "[i]" + state.selected + "[/i]";
changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputUnderline = () => {
if (state.unselsected[1].indexOf("[/u]") == 0) {
return
}
if (state.selected.indexOf("[u]") > -1) {
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, "");
changeContent();
return;
}
state.selected = "[u]" + state.selected + "[/u]";
changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputLink = () => {
if (state.selected.indexOf("[/url]") > -1) {
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, "");
changeContent();
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();
state.urlLink = '';
console.log(state.unselsected, state.selected, state.tableData.param.content);
});
};
var buttonColor = () => {
// if(state.selected.indexOf("[/color]") > -1){
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, "");
// changeContent();
// }
};
var inputColor = () => {
if (!state.color || state.color == "#000000") {
if (state.selected.indexOf("[/color]") > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, "");
changeContent();
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();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
//
const getModel = () => {
gameGMNoticeModelGet({noticeType: 1}).then((res) => {
console.log(res);
if (res.data.noticeModel) {
state.dbs = res.data.noticeModel;
}
})
};
const useModel = () => {
let model = state.dbs.find(r => r.id == state.model);
if (model) {
state.tableData.param.content = model.content;
}
};
const makeModel = () => {
state.listModelVisible = true;
console.log(state);
};
const setModel = (type: number, id: number) => {
switch (type) {
case 1:
state.editModelVisible = true;
break;
case 2:
state.editModel = state.dbs.find(model => model.id == id);
state.editModelVisible = true;
break;
case 3:
// state.dbs = state.dbs.filter(model => model.id != id);
// for (let i = 0; i < state.dbs.length; i++) {
// let model = state.dbs[i];
// if (model) {
// model.id = i + 1;
// }
// }
gameGMNoticeModelDel({
id: id,
}).then(function () {
getModel()
}).finally(function () {
});
break;
}
};
const saveModel = (type: number) => {
console.log(type, state.editModel);
switch (type) {
case 1:
gameGMNoticeModelAdd({
id: state.editModel.id,
title: state.editModel.title,
content: state.editModel.content,
noticeType: 1
}).then(function () {
getModel()
}).finally(function () {
state.editModelVisible = false;
});
break;
case 2:
state.listModelVisible = false;
// gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){
// }).finally(function(){
// state.listModelVisible = false;
// });
break;
}
};
const handleClose = (done: () => void) => {
// ElMessageBox.confirm('退').then(() => {
done()
// }).catch(() => {
// // catch error
// })
};
const showContent = () => {
state.contentVisible = true;
state.tableData.content = contentReplace(state.tableData.param.content);
console.log(state.tableData.content)
};
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
};
return {
switchServer,
showContent,
noticePop,
inputSelect,
inputBig,
inputItalic,
inputUnderline,
inputLink,
inputColor,
buttonColor,
getModel,
useModel,
makeModel,
setModel,
saveModel,
handleClose,
...toRefs(state),
};
},
if (state.selected.indexOf('[b]') > -1) {
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, '');
changeContent();
return;
}
state.selected = '[b]' + state.selected + '[/b]';
changeContent();
console.log(state.unselsected, state.selected.indexOf('[b]'), state.selected, state.tableData.param.content);
};
var inputItalic = () => {
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();
return;
}
state.selected = '[i]' + state.selected + '[/i]';
changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputUnderline = () => {
if (state.unselsected[1].indexOf('[/u]') == 0) {
return;
}
if (state.selected.indexOf('[u]') > -1) {
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, '');
changeContent();
return;
}
state.selected = '[u]' + state.selected + '[/u]';
changeContent();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
var inputLink = () => {
if (state.selected.indexOf('[/url]') > -1) {
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, '');
changeContent();
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();
state.urlLink = '';
console.log(state.unselsected, state.selected, state.tableData.param.content);
});
};
var buttonColor = () => {
// if(state.selected.indexOf("[/color]") > -1){
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, "");
// changeContent();
// }
};
var inputColor = () => {
if (!state.color || state.color == '#000000') {
if (state.selected.indexOf('[/color]') > -1) {
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, '');
changeContent();
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();
console.log(state.unselsected, state.selected, state.tableData.param.content);
};
//
const getModel = () => {
gameGMNoticeModelGet({ noticeType: 1 }).then((res) => {
console.log(res);
if (res.data.noticeModel) {
state.dbs = res.data.noticeModel;
}
});
};
const useModel = () => {
let model = state.dbs.find((r) => r.id == state.model);
if (model) {
state.tableData.param.content = model.content;
}
};
const makeModel = () => {
state.listModelVisible = true;
console.log(state);
};
const setModel = (type: number, id: number) => {
switch (type) {
case 1:
state.editModelVisible = true;
break;
case 2:
state.editModel = state.dbs.find((model) => model.id == id);
state.editModelVisible = true;
break;
case 3:
// state.dbs = state.dbs.filter(model => model.id != id);
// for (let i = 0; i < state.dbs.length; i++) {
// let model = state.dbs[i];
// if (model) {
// model.id = i + 1;
// }
// }
gameGMNoticeModelDel({
id: id,
})
.then(function () {
getModel();
})
.finally(function () {});
break;
}
};
const saveModel = (type: number) => {
console.log(type, state.editModel);
switch (type) {
case 1:
gameGMNoticeModelAdd({
id: state.editModel.id,
title: state.editModel.title,
content: state.editModel.content,
noticeType: 1,
})
.then(function () {
getModel();
})
.finally(function () {
state.editModelVisible = false;
});
break;
case 2:
state.listModelVisible = false;
// gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){
// }).finally(function(){
// state.listModelVisible = false;
// });
break;
}
};
const handleClose = (done: () => void) => {
// ElMessageBox.confirm('退').then(() => {
done();
// }).catch(() => {
// // catch error
// })
};
const showContent = () => {
state.contentVisible = true;
state.tableData.content = contentReplace(state.tableData.param.content);
console.log(state.tableData.content);
};
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers);
};
return {
switchServer,
showContent,
noticePop,
inputSelect,
inputBig,
inputItalic,
inputUnderline,
inputLink,
inputColor,
buttonColor,
getModel,
useModel,
makeModel,
setModel,
saveModel,
handleClose,
...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;
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;
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;
}
.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--inline .el-form-item {
display: -moz-flex;
vertical-align: middle;
margin-right: 32px;
display: -moz-flex;
vertical-align: middle;
margin-right: 32px;
}
</style>

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

@ -29,7 +29,7 @@
</el-card>-->
<el-card shadow="hover">
<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-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"/>-->
@ -37,12 +37,14 @@
<!-- </el-form-item>-->
<el-form-item label="选择服务器" prop="serverId">
<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.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" />
</el-select>
<div>
<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.paramDeposit.serverId" class="m-2" placeholder="选择服务器" size="large" filterable>
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id + ''" />
</el-select>
</div>
</el-form-item>
<!-- <el-form-item label="uid">-->
<!-- <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-form-item>
<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-select>
</el-form-item>
@ -63,7 +65,7 @@
<el-radio v-model="tableData.paramDeposit.count" :label="1">统计</el-radio>
</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>
</div>
@ -199,9 +201,9 @@ export default defineComponent({
//
onMounted(() => {
serverList().then((res) => {
state.servers = res
state.tableData.paramDeposit.serverId = "" + res[0].id;
});
state.servers = res;
state.tableData.paramDeposit.serverId = '' + res[0].id;
});
});
return {
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-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-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">

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-select>
<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-form-item>
<el-form-item label="账号">
@ -97,7 +97,7 @@ export default defineComponent({
serverSwitch: 0,
queryParams: {
account: "",
serverId: 1,
serverId: "",
id: "",
pageSize: 10,
pageNum: 1,
@ -105,7 +105,7 @@ export default defineComponent({
tableData: {
data: [],
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: [],
serverCategorize: ServerCategorize,
@ -132,12 +132,12 @@ export default defineComponent({
onMounted(() => {
serverList().then(res => {
state.servers = res;
state.queryParams.serverId = res[0].id;
});
});
const switchServer = () => {
return gSwitchServer(state.serverSwitch, state.servers)
};
return {

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

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

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

@ -137,7 +137,7 @@
<el-form :inline="true">
<el-form-item label="物品名称:">
<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-form-item>
<el-form-item>
@ -742,8 +742,8 @@ export default defineComponent({
villager: { list: [] },
accountType: [
{ label: '正常', value: 0 },
{ label: '黑名单', value: 0 },
{ label: 'GM', value: 0 },
{ label: '黑名单', value: 1 },
{ label: 'GM', value: 2 },
],
},
seasonConfig: SeasonConfigCategory,
@ -1061,7 +1061,7 @@ export default defineComponent({
if (!item) {
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);
if (!config) {
break;
@ -1341,7 +1341,7 @@ export default defineComponent({
', 繁荣值: ' +
data.prosperity;
} else if (type == 2) {
state.showData = '铜币: ' + data.goldIngot + ', 桃花石: ' + data.copper + ', 基础食物: ' + data.baseFood;
state.showData = '桃花石: ' + data.goldIngot + ', 铜币: ' + data.copper + ', 基础食物: ' + data.baseFood;
} else if (type == 3) {
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>
<div class="system-role-container">
<el-card shadow="hover" header="审核模式设置">
<el-form>
<el-form-item>
<el-button type="primary" @click="onOpenAdd()">
<el-icon>
<ele-FolderAdd/>
</el-icon>
新增
</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData.data" style="width: 100%">
<el-table-column prop="label" label="渠道" width="200">
<template #default="scope">
{{ channels.find(r => r.value == scope.row.label.substring(0, 12))?channels.find(r => r.value == scope.row.label.substring(0, 12)).label: scope.row.label.substring(0, 12)}}
</template>
</el-table-column>
<el-table-column prop="label" label="版本号" width="200">
<template #default="scope">
{{ scope.row.label.substring(12) }}
</template>
</el-table-column>
<el-table-column prop="value" label="审核模式" show-overflow-tooltip width="100">
<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>
<div class="system-role-container">
<el-card shadow="hover" :header="setName.label + '设置'">
<el-form :inline="true">
<el-form-item label="选择设置模式">
<el-select v-model="tableData.param.name" class="m-2" @change="changeName" placeholder="选择设置模式" filterable>
<el-option v-for="item in names" :key="item" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onOpenAdd()">
<el-icon>
<ele-FolderAdd />
</el-icon>
新增
</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData.data" style="width: 100%">
<el-table-column prop="label" label="渠道(优先判断)" width="200">
<template #default="scope">
<div v-if="scope.row.label.length >= 12">
{{
channels.find((r) => r.value == scope.row.label.substring(0, 12))
? channels.find((r) => r.value == scope.row.label.substring(0, 12)).label
: scope.row.label.substring(0, 12)
}}
</div>
<div v-if="scope.row.label.length < 12">
{{ channels.find((r) => r.value == '') ? channels.find((r) => r.value == '').label : '' }}
</div>
</template>
</el-table-column>
<el-table-column prop="label" label="版本号" width="200">
<template #default="scope">
<div v-if="scope.row.label.length > 12">
{{ scope.row.label.substring(12) }}
</div>
<div v-if="scope.row.label.length < 12">{{ scope.row.label }}</div>
<div v-else>所有版本</div>
</template>
</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>
<script lang="ts">
import {toRefs, reactive, onMounted, defineComponent, ref,} from 'vue';
import {allChannelList, serverList} from "/@/utils/game";
import {ElMessage, ElMessageBox} from 'element-plus';
import {gameDelAuditMode, gameGetAllAuditMode} from "/@/api/game/set";
import EditConfig from "/@/views/gameBug/clientBug/component/editConfig.vue";
import { toRefs, reactive, onMounted, defineComponent, ref } from 'vue';
import { allChannelList, serverList, GameSetList } from '/@/utils/game';
import { ElMessage, ElMessageBox } from 'element-plus';
import { gameDelAuditMode, gameGetAllAuditMode } from '/@/api/game/set';
import EditConfig from '/src/views/gameSet/auditMode/component/editConfig.vue';
interface TableDataState {
contentVisible: boolean;
ItemConfig: object;
tableData: {
data: object[];
total: number;
content: string;
param: {};
};
servers: object[]
channels: object[]
contentVisible: boolean;
ItemConfig: object;
tableData: {
data: object[];
total: number;
content: string;
param: {};
name: string;
};
servers: object[];
channels: object[];
setName: object;
names: object[];
}
export default defineComponent({
name: 'apiV1ClientBugList',
components: {EditConfig},
setup() {
const editDicRef = ref();
const state = reactive<TableDataState>({
contentVisible: false,
tableData: {
data: [],
total: 0,
content: "",
param: {},
},
channels: []
});
name: 'apiV1ClientBugList',
components: { EditConfig },
setup() {
const editDicRef = ref();
const state = reactive<TableDataState>({
contentVisible: false,
tableData: {
data: [],
total: 0,
content: '',
param: {
name: GameSetList[0].value,
},
},
channels: [],
setName: GameSetList[0],
names: GameSetList,
});
const mailList = () => {
gameGetAllAuditMode().then(res => {
console.log(res);
state.tableData.data = [];
if (res.data) {
let data = res.data.list ?? [];
for (let i in data) {
console.log(data[i], i);
state.tableData.data.push({
label: i,
value: data[i],
})
}
}
})
};
const mailList = () => {
gameGetAllAuditMode(state.tableData.param).then((res) => {
console.log(res);
state.tableData.data = [];
if (res.data) {
let data = res.data.list ?? [];
for (let i in data) {
console.log(data[i], i);
state.tableData.data.push({
label: i,
value: data[i],
});
}
}
});
};
//
const onHandleCurrentChange = () => {
console.log(`current page: ${state.tableData.param.pageNum}`);
mailList();
};
//
const onHandleCurrentChange = () => {
console.log(`current page: ${state.tableData.param.pageNum}`);
mailList();
};
const onRowDel = (row: any) => {
ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
gameDelAuditMode({label: row.label}).then(() => {
ElMessage.success('完成bug成功');
mailList();
})
}).catch(() => {
});
};
const onRowDel = (row: any) => {
ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
gameDelAuditMode({ label: row.label }).then(() => {
ElMessage.success('完成bug成功');
mailList();
});
})
.catch(() => {});
};
//
onMounted(() => {
serverList().then(value => {
state.servers = value;
// console.log(" servers : ", state.servers);
});
allChannelList().then(value => {
state.channels = value;
// console.log(" channels : ", state.channels);
});
mailList();
});
//
const onOpenAdd = () => {
editDicRef.value.openDialog({auditMode: "1", channel: "", version: ""});
};
//
const onOpenEdit = (row: any) => {
let data = {auditMode: row.value, channel: "", version: ""}
if (row.label.length > 12) {
data.channel = row.label.substring(0, 12);
data.version = row.label.substring(12);
} else if (row.label.length == 12) {
data.channel = row.label;
}
editDicRef.value.openDialog(data);
};
return {
editDicRef,
onHandleCurrentChange,
onRowDel,
mailList,
onOpenAdd,
onOpenEdit,
...toRefs(state),
};
},
//
onMounted(() => {
serverList().then((value) => {
state.servers = value;
});
allChannelList().then((value) => {
state.channels = value;
});
mailList();
});
//
const onOpenAdd = () => {
editDicRef.value.openDialog({ auditMode: '1', channel: '', version: '', name: state.tableData.param.name }, state.setName, true);
};
//
const onOpenEdit = (row: any) => {
let data = { auditMode: row.value, channel: '', version: '', name: state.tableData.param.name };
if (row.label.length > 12) {
data.channel = row.label.substring(0, 12);
data.version = row.label.substring(12);
} else if (row.label.length == 12) {
data.channel = row.label;
} else if (row.label.length < 12) {
data.version = row.label;
}
editDicRef.value.openDialog(data, state.setName, false);
};
const changeName = () => {
state.setName = state.names.find((r) => r.value === state.tableData.param.name);
mailList();
};
return {
editDicRef,
onHandleCurrentChange,
onRowDel,
mailList,
onOpenAdd,
onOpenEdit,
changeName,
...toRefs(state),
};
},
});
</script>

Loading…
Cancel
Save