29 changed files with 2254 additions and 1373 deletions
@ -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> |
|
@ -1,106 +1,210 @@ |
|||||||
<template> |
<template> |
||||||
<div> |
<div> |
||||||
<el-dialog title="添加参数" v-model="isShowDialog" width="769px"> |
<el-dialog title="添加参数" v-model="isShowDialog" width="769px"> |
||||||
<el-form label-width="90px" label-position="right"> |
<el-form label-width="90px" label-position="right"> |
||||||
<el-form-item label="选择渠道" prop="serverId"> |
<el-form-item label="选择渠道" prop="serverId"> |
||||||
<el-select v-model="queryParams.channel" class="m-2" placeholder="选择渠道" size="large"> |
<el-select v-model="queryParams.channel" class="m-2" placeholder="选择渠道" size="large"> |
||||||
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value"/> |
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
</el-select> |
</el-select> |
||||||
</el-form-item> |
</el-form-item> |
||||||
<el-form-item label="有效时间" prop="dates"> |
<el-form-item label="有效时间" prop="dates"> |
||||||
<el-date-picker style="width: 400px" range-separator="-" type="datetimerange" v-model="queryParams.dates" |
<el-date-picker |
||||||
start-placeholder="开始" end-placeholder="结束" value-format="YYYY-MM-DD HH:mm:ss"/> |
style="width: 400px" |
||||||
</el-form-item> |
range-separator="-" |
||||||
<el-form-item label="兑换次数" prop="times" label-width="100px"> |
type="datetimerange" |
||||||
<div class="flex-warp"> |
v-model="queryParams.dates" |
||||||
<el-input-number v-model="queryParams.times" placeholder="请输入兑换次数" size="large" |
start-placeholder="开始" |
||||||
controls-position="right" :min="1" style="width: 220px"/> |
end-placeholder="结束" |
||||||
</div> |
value-format="YYYY-MM-DD HH:mm:ss" |
||||||
</el-form-item> |
/> |
||||||
</el-form> |
</el-form-item> |
||||||
<template #footer> |
<el-form-item label="兑换次数" prop="times" label-width="100px"> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-input-number |
||||||
|
v-model="queryParams.times" |
||||||
|
placeholder="请输入兑换次数" |
||||||
|
size="large" |
||||||
|
controls-position="right" |
||||||
|
:min="1" |
||||||
|
style="width: 220px" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</el-form-item> |
||||||
|
<el-form-item label="奖励内容" /> |
||||||
|
<el-table :data="queryParams.awards" :inline="true" :cell-style="{ padding: '2' }" table-layout="fixed"> |
||||||
|
<el-table-column width="30"> |
||||||
|
<template #default="scope"> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-button size="small" type="text" @click="delItem(scope.$index)"> |
||||||
|
<el-icon> |
||||||
|
<ele-Minus /> |
||||||
|
</el-icon> |
||||||
|
</el-button> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column width="60" label="序号"> |
||||||
|
<template #default="scope"> |
||||||
|
<div class="flex-warp">{{ scope.$index + 1 }}</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="物品"> |
||||||
|
<template #default="scope"> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-select v-model="scope.row.itemId" filterable placeholder="请选择物品"> |
||||||
|
<el-option v-for="item in ItemConfig" :key="item.Id" :label="item.Id + ' ' + item.DetailsPageName" :value="item.Id" /> |
||||||
|
</el-select> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column label="数量"> |
||||||
|
<template #default="scope"> |
||||||
|
<div class="flex-warp"> |
||||||
|
<el-input-number |
||||||
|
v-model="scope.row.num" |
||||||
|
placeholder="请输入数量" |
||||||
|
style="width: 220px" |
||||||
|
:min="1" |
||||||
|
onkeyup="this.value=this.value.replace(/\D/g,'');" |
||||||
|
controls-position="right" |
||||||
|
onafterpaste="this.value=this.value.replace(/\D/g,'')" |
||||||
|
/> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
<el-button size="default" type="primary" style="margin: 10px 0" @click="addItem()"> |
||||||
|
<el-icon> |
||||||
|
<ele-Plus /> |
||||||
|
</el-icon> |
||||||
|
添加奖励 |
||||||
|
</el-button> |
||||||
|
</el-form> |
||||||
|
<template #footer> |
||||||
<span class="dialog-footer"> |
<span class="dialog-footer"> |
||||||
<el-button @click="onCancel" size="default">取 消</el-button> |
<el-button @click="onCancel" size="default">取 消</el-button> |
||||||
<el-button size="default" type="primary" class="ml10" @click="addItem"> |
<el-button size="default" type="primary" class="ml10" @click="update"> |
||||||
<el-icon> |
<el-icon> |
||||||
<ele-EditPen/> |
<ele-EditPen /> |
||||||
</el-icon> |
</el-icon> |
||||||
修改 |
修改 |
||||||
</el-button> |
</el-button> |
||||||
</span> |
</span> |
||||||
</template> |
</template> |
||||||
</el-dialog> |
</el-dialog> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import {reactive, toRefs, defineComponent} from 'vue'; |
import { reactive, toRefs, defineComponent } from 'vue'; |
||||||
import {ElLoading} from "element-plus"; |
import { ElLoading, ElMessage } from 'element-plus'; |
||||||
import {updateGiftExchange} from "/@/api/game"; |
import { updateGiftExchange } from '/@/api/game'; |
||||||
import {allChannelList} from "/@/utils/game"; |
import { allChannelList } from '/@/utils/game'; |
||||||
|
import AllItemConfigCategory from '/@/api/config/AllItemConfigCategory.json'; |
||||||
|
|
||||||
interface TableDataState { |
interface TableDataState { |
||||||
isShowDialog: boolean, |
isShowDialog: boolean; |
||||||
queryParams: object; |
queryParams: object; |
||||||
channels: object[]; |
channels: object[]; |
||||||
|
ItemConfig: object[]; |
||||||
} |
} |
||||||
|
|
||||||
export default defineComponent({ |
export default defineComponent({ |
||||||
name: 'systemEditDicData', |
name: 'systemEditDicData', |
||||||
setup(prop, {emit}) { |
setup(prop, { emit }) { |
||||||
const state = reactive<TableDataState>({ |
const state = reactive<TableDataState>({ |
||||||
isShowDialog: false, |
isShowDialog: false, |
||||||
queryParams: {}, |
queryParams: {}, |
||||||
channels: [], |
channels: [], |
||||||
}); |
ItemConfig: AllItemConfigCategory, |
||||||
|
}); |
||||||
|
|
||||||
// 打开弹窗 |
// 打开弹窗 |
||||||
const openDialog = (row: any | null) => { |
const openDialog = (row: any | null) => { |
||||||
state.isShowDialog = true; |
state.isShowDialog = true; |
||||||
state.queryParams = row || {}; |
state.queryParams = row || {}; |
||||||
allChannelList().then(res => { |
state.queryParams.awards = state.queryParams.rewards; |
||||||
state.channels = res; |
allChannelList().then((res) => { |
||||||
}) |
state.channels = res; |
||||||
}; |
}); |
||||||
|
}; |
||||||
|
|
||||||
// 关闭弹窗 |
// 关闭弹窗 |
||||||
const closeDialog = () => { |
const closeDialog = () => { |
||||||
state.isShowDialog = false; |
state.isShowDialog = false; |
||||||
}; |
}; |
||||||
// 取消 |
// 取消 |
||||||
const onCancel = () => { |
const onCancel = () => { |
||||||
closeDialog(); |
closeDialog(); |
||||||
}; |
}; |
||||||
// 新增 |
// 新增 |
||||||
const addItem = () => { |
const update = () => { |
||||||
const loading = ElLoading.service({ |
const loading = ElLoading.service({ |
||||||
lock: true, |
lock: true, |
||||||
text: 'Loading', |
text: 'Loading', |
||||||
background: 'rgba(0, 0, 0, 0.7)', |
background: 'rgba(0, 0, 0, 0.7)', |
||||||
}); |
}); |
||||||
let data = {} |
let data = {}; |
||||||
data["startTime"] = state.queryParams.dates[0] |
let msg = stateAward(); |
||||||
data["stopTime"] = state.queryParams.dates[1] |
if (msg) { |
||||||
data["configId"] = state.queryParams.id |
ElMessage.error(msg); |
||||||
data["channel"] = state.queryParams.channel |
loading.close(); |
||||||
data["times"] = state.queryParams.times |
return; |
||||||
console.log(state.queryParams, data); |
} |
||||||
updateGiftExchange(data).then((res) => { |
data['startTime'] = state.queryParams.dates[0]; |
||||||
console.log(res); |
data['stopTime'] = state.queryParams.dates[1]; |
||||||
}).finally(function () { |
data['configId'] = state.queryParams.id; |
||||||
loading.close(); |
data['channel'] = state.queryParams.channel; |
||||||
emit('countList') |
data['times'] = state.queryParams.times; |
||||||
closeDialog(); |
data['awards'] = state.queryParams.awards; |
||||||
}); |
console.log(state.queryParams, data); |
||||||
|
updateGiftExchange(data) |
||||||
}; |
.then((res) => { |
||||||
return { |
console.log(res); |
||||||
openDialog, |
}) |
||||||
closeDialog, |
.finally(function () { |
||||||
onCancel, |
loading.close(); |
||||||
addItem, |
emit('countList'); |
||||||
...toRefs(state), |
closeDialog(); |
||||||
}; |
}); |
||||||
}, |
}; |
||||||
|
let stateAward = () => { |
||||||
|
console.log(state.queryParams); |
||||||
|
if (state.queryParams.awards.length == 0 || !state.queryParams.awards) { |
||||||
|
console.log('1', state.queryParams); |
||||||
|
return '奖励配置未填写'; |
||||||
|
} |
||||||
|
for (let i in state.queryParams.awards) { |
||||||
|
state.queryParams.awards[i].itemId = Number(state.queryParams.awards[i].itemId); |
||||||
|
state.queryParams.awards[i].num = Number(state.queryParams.awards[i].num); |
||||||
|
if (!state.queryParams.awards[i].itemId || !state.queryParams.awards[i].num) { |
||||||
|
console.log('4', state.queryParams.awards[i]); |
||||||
|
return '奖励配置未填写'; |
||||||
|
} |
||||||
|
} |
||||||
|
// state.queryParams.rewards = JSON.stringify(state.queryParams.awards); |
||||||
|
return ''; |
||||||
|
}; |
||||||
|
const delItem = (index: number) => { |
||||||
|
console.log('delItem: ', index); |
||||||
|
state.queryParams.awards.splice(index, 1); |
||||||
|
}; |
||||||
|
const addItem = () => { |
||||||
|
let item = {}; |
||||||
|
if (!state.queryParams.awards) { |
||||||
|
state.queryParams.awards = []; |
||||||
|
} |
||||||
|
state.queryParams.awards.push(item); |
||||||
|
}; |
||||||
|
return { |
||||||
|
openDialog, |
||||||
|
closeDialog, |
||||||
|
onCancel, |
||||||
|
update, |
||||||
|
addItem, |
||||||
|
delItem, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
}); |
}); |
||||||
</script> |
</script> |
||||||
|
@ -1,224 +1,229 @@ |
|||||||
<template> |
<template> |
||||||
<div class="game-order-container"> |
<div class="game-order-container"> |
||||||
<el-card shadow="hover" header="设置账号黑名单"> |
<el-card shadow="hover" header="设置账号黑名单"> |
||||||
<div class="game-order-search mb15"> |
<div class="game-order-search mb15"> |
||||||
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 520px"> |
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 600px"> |
||||||
<el-form-item label="查找方式"> |
<el-form-item label="查找方式"> |
||||||
<el-select v-model="tableData.data.type" class="w-50 m-2" placeholder="选择渠道" size="large"> |
<el-select v-model="tableData.data.type" class="m-2" placeholder="选择渠道" size="large" style="width: 300px"> |
||||||
<el-option label="uid查询" :value="1"/> |
<el-option label="uid查询" :value="1" /> |
||||||
<el-option label="账号查询" :value="2"/> |
<el-option label="账号查询" :value="2" /> |
||||||
</el-select> |
</el-select> |
||||||
</el-form-item> |
</el-form-item> |
||||||
<el-form-item label="区服" v-if="tableData.data.type==2"> |
<el-form-item label="区服"> |
||||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> |
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
</el-select> |
</el-select> |
||||||
<el-select v-model="tableData.data.serverId" class="w-50 m-2" placeholder="选择区服" size="large" |
<el-select v-model="tableData.data.serverId" class="w-50 m-2" placeholder="选择区服" size="large" filterable> |
||||||
filterable> |
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/> |
</el-select> |
||||||
</el-select> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="渠道" v-if="tableData.data.type == 2"> |
||||||
<el-form-item label="渠道" v-if="tableData.data.type==2"> |
<el-select v-model="tableData.data.channel" class="m-2" placeholder="选择渠道" size="large" style="width: 300px"> |
||||||
<el-select v-model="tableData.data.channel" class="w-50 m-2" placeholder="选择渠道" size="large"> |
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
<el-option v-for="item in channels" :key="item.value" :label="item.label" :value="item.value"/> |
</el-select> |
||||||
</el-select> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="账号" v-if="tableData.data.type == 2"> |
||||||
<el-form-item label="账号" v-if="tableData.data.type==2"> |
<el-input v-model="tableData.data.account" placeholder="" class="w-50 m-2" size="large" clearable /> |
||||||
<el-input v-model="tableData.data.account" placeholder="" class="w-50 m-2" size="large" clearable/> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="uid" v-if="tableData.data.type == 1"> |
||||||
<el-form-item label="uid" v-if="tableData.data.type==1"> |
<el-input v-model="tableData.data.uid" placeholder="" class="w-50 m-2" size="large" clearable /> |
||||||
<el-input v-model="tableData.data.uid" placeholder="" class="w-50 m-2" size="large" clearable/> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="黑名单开关"> |
||||||
<el-form-item label="黑名单开关"> |
<el-select v-model="tableData.data.gmState" class="m-2" placeholder="选择渠道" size="large" style="width: 300px"> |
||||||
<el-select v-model="tableData.data.gmState" class="w-50 m-2" placeholder="选择渠道" size="large"> |
<el-option v-for="item in gmStates" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
<el-option v-for="item in gmStates" :key="item.value" :label="item.label" |
</el-select> |
||||||
:value="item.value"/> |
</el-form-item> |
||||||
</el-select> |
<el-form-item> |
||||||
</el-form-item> |
<el-button size="large" type="primary" class="ml10" @click="gmSearch"> 查询</el-button> |
||||||
<el-form-item> |
<el-button size="large" type="primary" class="ml10" @click="gmChange"> 修改</el-button> |
||||||
<el-button size="large" type="primary" class="ml10" @click="gmSearch"> |
</el-form-item> |
||||||
查询 |
</el-form> |
||||||
</el-button> |
</div> |
||||||
<el-button size="large" type="primary" class="ml10" @click="gmChange"> |
</el-card> |
||||||
修改 |
<el-card shadow="hover" header="开游戏里的GM"> |
||||||
</el-button> |
<div class="game-order-search mb15"> |
||||||
</el-form-item> |
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 600px"> |
||||||
</el-form> |
<el-form-item label="区服"> |
||||||
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||||
</div> |
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
|
</el-select> |
||||||
</el-card> |
<el-select v-model="tableData.querys.serverId" class="w-50 m-2" placeholder="选择区服" size="large" filterable> |
||||||
<el-card shadow="hover" header="开游戏里的GM"> |
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||||
<div class="game-order-search mb15"> |
</el-select> |
||||||
<el-form label-position="right" label-width="300px" :model="formLabelAlign" style="max-width: 520px"> |
</el-form-item> |
||||||
<el-form-item label="uid"> |
<el-form-item label="uid"> |
||||||
<el-input v-model="tableData.querys.uids" placeholder="可多个用“;”隔开" class="w-50 m-2" size="large" |
<el-input v-model="tableData.querys.uids" placeholder="填写uid" class="w-50 m-2" size="large" clearable /> |
||||||
clearable/> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="gm开关"> |
||||||
<el-form-item label="gm开关"> |
<el-select v-model="tableData.querys.state" class="m-2" placeholder="选择渠道" size="large" style="width: 300px"> |
||||||
<el-select v-model="tableData.querys.state" class="w-50 m-2" placeholder="选择渠道" size="large"> |
<el-option label="取消" :value="0" /> |
||||||
<el-option label="取消" :value="0"/> |
<el-option label="开启" :value="1" /> |
||||||
<el-option label="开启" :value="1"/> |
</el-select> |
||||||
</el-select> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item> |
||||||
<el-form-item> |
<el-button size="large" type="primary" class="ml10" @click="setclientgm"> 修改</el-button> |
||||||
<el-button size="large" type="primary" class="ml10" @click="setclientgm"> |
</el-form-item> |
||||||
修改 |
</el-form> |
||||||
</el-button> |
</div> |
||||||
</el-form-item> |
</el-card> |
||||||
</el-form> |
</div> |
||||||
</div> |
|
||||||
</el-card> |
|
||||||
</div> |
|
||||||
|
|
||||||
|
|
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||||
import {gameChangeGm, gameGmSearch, gameListGm, gameSetclientgm} from "/@/api/game"; |
import { gameChangeGm, gameGmSearch, gameListGm, gameSetclientgm } from '/@/api/game'; |
||||||
import {channelList, ServerCategorize, serverList} from "/@/utils/game"; |
import { channelList, ServerCategorize, serverList } from '/@/utils/game'; |
||||||
import {gSwitchServer} from "/@/utils/utils"; |
import { gSwitchServer } from '/@/utils/utils'; |
||||||
import {ElMessage} from "element-plus/es"; |
import { ElMessage } from 'element-plus/es'; |
||||||
|
|
||||||
interface TableData { |
interface TableData { |
||||||
type: number |
type: number; |
||||||
uid: string |
uid: string; |
||||||
channel: string |
channel: string; |
||||||
serverId: string |
serverId: string; |
||||||
account: string |
account: string; |
||||||
gmState: number |
gmState: number; |
||||||
} |
} |
||||||
|
|
||||||
interface TableDataState { |
interface TableDataState { |
||||||
queryParams: { |
queryParams: { |
||||||
pageNum: number |
pageNum: number; |
||||||
pageSize: number |
pageSize: number; |
||||||
serverId: string |
serverId: string; |
||||||
gmState: number |
gmState: number; |
||||||
total: number |
total: number; |
||||||
}; |
}; |
||||||
tableData: { |
tableData: { |
||||||
querys: { |
querys: { |
||||||
uids: string, |
serverId: string; |
||||||
state: number, |
uids: string; |
||||||
}, |
state: number; |
||||||
data: TableData |
}; |
||||||
list: object[] |
data: TableData; |
||||||
}; |
list: object[]; |
||||||
servers: object; |
}; |
||||||
channels: object; |
servers: object; |
||||||
gmStates: object; |
channels: object; |
||||||
serverSwitch: number; |
gmStates: object; |
||||||
serverCategorize: object; |
serverSwitch: number; |
||||||
|
serverCategorize: object; |
||||||
} |
} |
||||||
|
|
||||||
export default defineComponent({ |
export default defineComponent({ |
||||||
name: 'apiV1GameManageGm', |
name: 'apiV1GameManageGm', |
||||||
setup() { |
setup() { |
||||||
const state = reactive<TableDataState>({ |
const state = reactive<TableDataState>({ |
||||||
serverSwitch: 0, |
serverSwitch: 0, |
||||||
queryParams: { |
queryParams: { |
||||||
pageNum: 1, |
pageNum: 1, |
||||||
pageSize: 10, |
pageSize: 10, |
||||||
serverId: "", |
serverId: '', |
||||||
gmState: 1, |
gmState: 1, |
||||||
total: 0, |
total: 0, |
||||||
}, |
}, |
||||||
|
|
||||||
tableData: { |
|
||||||
querys: { |
|
||||||
uids: "", |
|
||||||
state: 1, |
|
||||||
}, |
|
||||||
data: { |
|
||||||
type: 1, |
|
||||||
channel: "", |
|
||||||
serverId: "", |
|
||||||
account: "", |
|
||||||
uid: "", |
|
||||||
gmState: 0 |
|
||||||
}, |
|
||||||
list: [] |
|
||||||
}, |
|
||||||
channels: [], |
|
||||||
servers: [], |
|
||||||
gmStates: [ |
|
||||||
{ |
|
||||||
value: 0, |
|
||||||
label: '正常', |
|
||||||
}, |
|
||||||
{ |
|
||||||
value: 1, |
|
||||||
label: '黑名单', |
|
||||||
}, |
|
||||||
], |
|
||||||
serverCategorize: ServerCategorize, |
|
||||||
}); |
|
||||||
const gmSearch = () => { |
|
||||||
let query = {type: state.tableData.data.type, uid: state.tableData.data.uid}; |
|
||||||
if (state.tableData.data.type == 2) { |
|
||||||
query["account"] = state.tableData.data.channel + state.tableData.data.account; |
|
||||||
query["serverId"] = state.tableData.data.serverId; |
|
||||||
} |
|
||||||
gameGmSearch(query).then((res) => { |
|
||||||
ElMessage.success('查询成功'); |
|
||||||
console.log(res); |
|
||||||
state.tableData.data.gmState = res.data.gm |
|
||||||
}).finally(() => { |
|
||||||
// state.loading = false; |
|
||||||
}) |
|
||||||
} |
|
||||||
const gmChange = () => { |
|
||||||
let query = { |
|
||||||
type: state.tableData.data.type, |
|
||||||
uid: state.tableData.data.uid, |
|
||||||
gmState: state.tableData.data.gmState |
|
||||||
}; |
|
||||||
if (state.tableData.data.type == 2) { |
|
||||||
query["account"] = state.tableData.data.channel + state.tableData.data.account; |
|
||||||
query["serverId"] = state.tableData.data.serverId; |
|
||||||
} |
|
||||||
gameChangeGm(query).then(() => { |
|
||||||
ElMessage.success('修改成功'); |
|
||||||
}).finally(() => { |
|
||||||
}) |
|
||||||
} |
|
||||||
const setclientgm = () => { |
|
||||||
|
|
||||||
gameSetclientgm(state.tableData.querys).then(() => { |
tableData: { |
||||||
ElMessage.success('修改成功'); |
querys: { |
||||||
}).finally(() => { |
serverId: '', |
||||||
}) |
uids: '', |
||||||
} |
state: 1, |
||||||
const gmList = () => { |
}, |
||||||
gameListGm(state.queryParams).then((res) => { |
data: { |
||||||
state.tableData.list = res.data.uids |
type: 1, |
||||||
ElMessage.success('获取成功'); |
channel: '', |
||||||
}).finally(() => { |
serverId: '', |
||||||
}) |
account: '', |
||||||
} |
uid: '', |
||||||
// 页面加载时 |
gmState: 0, |
||||||
onMounted(() => { |
}, |
||||||
serverList().then(res => { |
list: [], |
||||||
state.servers = res; |
}, |
||||||
}) |
channels: [], |
||||||
channelList().then(res => { |
servers: [], |
||||||
state.channels = res |
gmStates: [ |
||||||
}) |
{ |
||||||
}); |
value: 0, |
||||||
// 打开修改字典弹窗 |
label: '正常', |
||||||
const switchServer = () => { |
}, |
||||||
return gSwitchServer(state.serverSwitch, state.servers) |
{ |
||||||
}; |
value: 1, |
||||||
return { |
label: '黑名单', |
||||||
switchServer, |
}, |
||||||
gmSearch, |
{ |
||||||
gmChange, |
value: 2, |
||||||
setclientgm, |
label: 'GM', |
||||||
gmList, |
}, |
||||||
...toRefs(state), |
], |
||||||
}; |
serverCategorize: ServerCategorize, |
||||||
}, |
}); |
||||||
|
const gmSearch = () => { |
||||||
|
let query = { type: state.tableData.data.type, uid: state.tableData.data.uid }; |
||||||
|
if (state.tableData.data.type == 2) { |
||||||
|
query['account'] = state.tableData.data.channel + state.tableData.data.account; |
||||||
|
query['serverId'] = state.tableData.data.serverId; |
||||||
|
} |
||||||
|
gameGmSearch(query) |
||||||
|
.then((res) => { |
||||||
|
ElMessage.success('查询成功'); |
||||||
|
console.log(res); |
||||||
|
state.tableData.data.gmState = res.data.gm; |
||||||
|
}) |
||||||
|
.finally(() => { |
||||||
|
// state.loading = false; |
||||||
|
}); |
||||||
|
}; |
||||||
|
const gmChange = () => { |
||||||
|
let query = { |
||||||
|
type: state.tableData.data.type, |
||||||
|
uid: state.tableData.data.uid, |
||||||
|
gmState: state.tableData.data.gmState, |
||||||
|
}; |
||||||
|
if (state.tableData.data.type == 2) { |
||||||
|
query['account'] = state.tableData.data.channel + state.tableData.data.account; |
||||||
|
query['serverId'] = state.tableData.data.serverId; |
||||||
|
} |
||||||
|
gameChangeGm(query) |
||||||
|
.then(() => { |
||||||
|
ElMessage.success('修改成功'); |
||||||
|
}) |
||||||
|
.finally(() => {}); |
||||||
|
}; |
||||||
|
const setclientgm = () => { |
||||||
|
gameSetclientgm(state.tableData.querys) |
||||||
|
.then(() => { |
||||||
|
ElMessage.success('修改成功'); |
||||||
|
}) |
||||||
|
.finally(() => {}); |
||||||
|
}; |
||||||
|
const gmList = () => { |
||||||
|
gameListGm(state.queryParams) |
||||||
|
.then((res) => { |
||||||
|
state.tableData.list = res.data.uids; |
||||||
|
ElMessage.success('获取成功'); |
||||||
|
}) |
||||||
|
.finally(() => {}); |
||||||
|
}; |
||||||
|
// 页面加载时 |
||||||
|
onMounted(() => { |
||||||
|
serverList().then((res) => { |
||||||
|
state.servers = res; |
||||||
|
}); |
||||||
|
channelList().then((res) => { |
||||||
|
state.channels = res; |
||||||
|
}); |
||||||
|
}); |
||||||
|
// 打开修改字典弹窗 |
||||||
|
const switchServer = () => { |
||||||
|
return gSwitchServer(state.serverSwitch, state.servers); |
||||||
|
}; |
||||||
|
return { |
||||||
|
switchServer, |
||||||
|
gmSearch, |
||||||
|
gmChange, |
||||||
|
setclientgm, |
||||||
|
gmList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
}); |
}); |
||||||
</script> |
</script> |
||||||
|
@ -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> |
@ -1,449 +1,457 @@ |
|||||||
<template> |
<template> |
||||||
<div class="game-maintenance-container"> |
<div class="game-maintenance-container"> |
||||||
<el-card shadow="hover" header="弹窗公告"> |
<el-card shadow="hover" header="弹窗公告"> |
||||||
<el-form label-width="90px"> |
<el-form label-width="90px"> |
||||||
<el-form-item label="服务器:" prop="serverId"> |
<el-form-item label="服务器:" prop="serverId"> |
||||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> |
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
</el-select> |
</el-select> |
||||||
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> |
<el-select v-model="tableData.param.servers" class="m-2" placeholder="选择服务器" size="large" multiple clearable> |
||||||
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id"/> |
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
||||||
</el-select> |
</el-select> |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form> |
</el-form> |
||||||
<el-form label-width="90px"> |
<el-form label-width="90px"> |
||||||
<el-form-item label="类型:" style="width: 25%"> |
<el-form-item label="类型:" style="width: 25%"> |
||||||
<el-radio-group v-model="tableData.param.popType"> |
<el-radio-group v-model="tableData.param.popType"> |
||||||
<el-radio :label=1>普通弹窗</el-radio> |
<el-radio :label="1">普通弹窗</el-radio> |
||||||
<el-radio :label=2>强制退到登录</el-radio> |
<el-radio :label="2">强制退到登录</el-radio> |
||||||
<el-radio :label=3>强制退到公告</el-radio> |
<el-radio :label="3">强制退到公告</el-radio> |
||||||
<el-radio :label=6>滚动公告</el-radio> |
<el-radio :label="6">滚动公告</el-radio> |
||||||
</el-radio-group> |
</el-radio-group> |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form> |
</el-form> |
||||||
<el-form label-width="90px" :inline="true"> |
<el-form label-width="90px" :inline="true"> |
||||||
<el-form-item label="发送对象:" style="width: 25%"> |
<el-form-item label="发送对象:" style="width: 25%"> |
||||||
<el-radio-group v-model="tableData.param.popTo"> |
<el-radio-group v-model="tableData.param.popTo"> |
||||||
<el-radio :label=1>全部玩家</el-radio> |
<el-radio :label="1">全部玩家</el-radio> |
||||||
<el-radio :label=2>部分玩家</el-radio> |
<el-radio :label="2">部分玩家</el-radio> |
||||||
</el-radio-group> |
</el-radio-group> |
||||||
</el-form-item> |
</el-form-item> |
||||||
<el-form-item style="width: 50%"> |
<el-form-item style="width: 50%"> |
||||||
<el-tooltip content="uid之间用分号(;)隔开"> |
<el-tooltip content="uid之间用分号(;)隔开"> |
||||||
<el-input v-show="tableData.param.popTo==2" v-model="tableData.param.uids" placeholder="玩家uid" |
<el-input v-show="tableData.param.popTo == 2" v-model="tableData.param.uids" placeholder="玩家uid" clearable /> |
||||||
clearable/> |
</el-tooltip> |
||||||
</el-tooltip> |
</el-form-item> |
||||||
</el-form-item> |
</el-form> |
||||||
</el-form> |
<el-form label-width="90px"> |
||||||
<el-form label-width="90px"> |
<el-form-item> |
||||||
<el-form-item> |
<el-select v-model="model" @change="useModel(1)" placeholder="请选择模板" popper-class="custom-header"> |
||||||
<el-select v-model="model" @change="useModel(1)" placeholder="请选择模板" popper-class="custom-header"> |
<el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id"> |
||||||
<el-option v-for="item in dbs" :key="item.id" :label="item.title" :value="item.id"> |
{{ item.title }} |
||||||
{{ item.title }} |
</el-option> |
||||||
</el-option> |
</el-select> |
||||||
</el-select> |
<el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button> |
||||||
<el-button type="primary" @click="makeModel(1)" style="margin-left: 20px">编辑模板</el-button> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item> |
||||||
<el-form-item> |
<el-button size="small" @click="inputBig" style="margin-bottom: -15px"> |
||||||
<el-button size="small" @click="inputBig" style="margin-bottom: -15px"> |
<span style="font-weight: bold">B</span> |
||||||
<span style="font-weight:bold;">B</span> |
</el-button> |
||||||
</el-button> |
<el-button size="small" @click="inputItalic" style="margin-bottom: -15px"> |
||||||
<el-button size="small" @click="inputItalic" style="margin-bottom: -15px"> |
<span style="font-style: italic">I</span> |
||||||
<span style="font-style:italic;">I</span> |
</el-button> |
||||||
</el-button> |
<el-button size="small" @click="inputUnderline" style="margin-bottom: -15px"> |
||||||
<el-button size="small" @click="inputUnderline" style="margin-bottom: -15px"> |
<span style="text-decoration: underline">U</span> |
||||||
<span style="text-decoration:underline;">U</span> |
</el-button> |
||||||
</el-button> |
<el-button size="small" @click="inputLink" style="margin-bottom: -15px; padding: 0; padding-left: 5px"> |
||||||
<el-button size="small" @click="inputLink" style="margin-bottom: -15px; padding: 0; padding-left: 5px"> |
<el-icon type="text"> |
||||||
<el-icon type="text"> |
<ele-Link /> |
||||||
<ele-Link/> |
</el-icon> |
||||||
</el-icon> |
</el-button> |
||||||
</el-button> |
<el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0"> |
||||||
<el-button size="small" class="color-picker font-color-picker" style="margin-bottom: -15px; padding: 0;"> |
<el-color-picker size="default" v-model="color" @change="inputColor"></el-color-picker> |
||||||
<el-color-picker size="default" v-model="color" @change="inputColor"></el-color-picker> |
</el-button> |
||||||
</el-button> |
<el-form-item style="margin-bottom: -15px; margin-left: 20px"> |
||||||
<el-form-item style="margin-bottom: -15px; margin-left: 20px"> |
<el-button type="primary" @click="showContent" style="margin-left: 20px">内容预览</el-button> |
||||||
<el-button type="primary" @click="showContent" style="margin-left: 20px">内容预览</el-button> |
</el-form-item> |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form-item> |
<el-form-item label="公告内容:"> |
||||||
<el-form-item label="公告内容:"> |
<el-input v-model="tableData.param.content" type="textarea" rows="18" @mouseup="inputSelect" @blur="inputSelect" clearable /> |
||||||
<el-input v-model="tableData.param.content" type="textarea" rows="18" @mouseup="inputSelect" |
</el-form-item> |
||||||
@blur="inputSelect" clearable/> |
<el-form-item> |
||||||
</el-form-item> |
<el-button size="large" type="primary" @click="noticePop"> 弹窗公告发送 </el-button> |
||||||
<el-form-item> |
</el-form-item> |
||||||
<el-button size="large" type="primary" @click="noticePop"> |
</el-form> |
||||||
弹窗公告发送 |
</el-card> |
||||||
</el-button> |
|
||||||
</el-form-item> |
|
||||||
</el-form> |
|
||||||
</el-card> |
|
||||||
|
|
||||||
<el-dialog v-model="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" center> |
<el-dialog v-model="listModelVisible" :close-on-click-modal="false" :before-close="handleClose" center> |
||||||
<div class="my-header"> |
<div class="my-header"> |
||||||
<el-button type="" @click="saveModel(2)">保存</el-button> |
<el-button type="" @click="saveModel(2)">保存</el-button> |
||||||
<el-button type="primary" @click="setModel(1)">添加</el-button> |
<el-button type="primary" @click="setModel(1)">添加</el-button> |
||||||
</div> |
</div> |
||||||
<el-table :data="dbs" :inline="true" :cell-style="{padding:'0'}"> |
<el-table :data="dbs" :inline="true" :cell-style="{ padding: '0' }"> |
||||||
<el-table-column> |
<el-table-column> |
||||||
<template #default="scope"> |
<template #default="scope"> |
||||||
<div class="flex-warp"> |
<div class="flex-warp"> |
||||||
{{ scope.row.title }} |
{{ scope.row.title }} |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
</el-table-column> |
</el-table-column> |
||||||
<el-table-column width="150"> |
<el-table-column width="150"> |
||||||
<template #default="scope"> |
<template #default="scope"> |
||||||
<el-button size="small" type="danger" @click="setModel(3,scope.row.id)" inline="true">删</el-button> |
<el-button size="small" type="danger" @click="setModel(3, scope.row.id)" inline="true">删</el-button> |
||||||
<el-button size="small" type="primary" @click="setModel(2,scope.row.id)" inline="true">改</el-button> |
<el-button size="small" type="primary" @click="setModel(2, scope.row.id)" inline="true">改</el-button> |
||||||
</template> |
</template> |
||||||
</el-table-column> |
</el-table-column> |
||||||
</el-table> |
</el-table> |
||||||
</el-dialog> |
</el-dialog> |
||||||
|
|
||||||
<el-dialog v-model="editModelVisible" :close-on-click-modal="false" center> |
<el-dialog v-model="editModelVisible" :close-on-click-modal="false" center> |
||||||
<el-form label-width="90px"> |
<el-form label-width="90px"> |
||||||
<el-form-item label="模板名称" prop="title"> |
<el-form-item label="模板名称" prop="title"> |
||||||
<el-input v-model="editModel.title" placeholder="请输入模板名称"/> |
<el-input v-model="editModel.title" placeholder="请输入模板名称" /> |
||||||
</el-form-item> |
</el-form-item> |
||||||
<el-form-item label="模板内容" prop="content"> |
<el-form-item label="模板内容" prop="content"> |
||||||
<el-input v-model="editModel.content" type="textarea" placeholder="请输入内容" rows="25"/> |
<el-input v-model="editModel.content" type="textarea" placeholder="请输入内容" rows="25" /> |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form> |
</el-form> |
||||||
<template #footer> |
<template #footer> |
||||||
<div class="dialog-footer"> |
<div class="dialog-footer"> |
||||||
<el-button type="primary" @click="saveModel(1)"> |
<el-button type="primary" @click="saveModel(1)"> 保存 </el-button> |
||||||
保存 |
</div> |
||||||
</el-button> |
</template> |
||||||
</div> |
</el-dialog> |
||||||
</template> |
|
||||||
</el-dialog> |
|
||||||
|
|
||||||
<el-dialog v-model="contentVisible" :close-on-click-modal="false" center> |
<el-dialog v-model="contentVisible" :close-on-click-modal="false" center> |
||||||
<p v-html="tableData.content"></p> |
<p v-html="tableData.content"></p> |
||||||
</el-dialog> |
</el-dialog> |
||||||
</div> |
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||||
import {ElMessageBox, ElMessage} from 'element-plus'; |
import { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
import {gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel} from "/@/api/game"; |
import { gameNoticePop, gameGMNoticeModelGet, gameGMNoticeModelAdd, gameGMNoticeModelDel } from '/@/api/game'; |
||||||
import {contentReplace, gSwitchServer} from "/@/utils/utils"; |
import { contentReplace, gSwitchServer } from '/@/utils/utils'; |
||||||
import {ServerCategorize, serverList} from "/@/utils/game"; |
import { ServerCategorize, serverList } from '/@/utils/game'; |
||||||
|
|
||||||
interface TableDataState { |
interface TableDataState { |
||||||
unselsected: string[] |
unselsected: string[]; |
||||||
colorPicker: boolean |
colorPicker: boolean; |
||||||
color: string |
color: string; |
||||||
selected: string |
selected: string; |
||||||
urlLink: string |
urlLink: string; |
||||||
dbs: object[] |
dbs: object[]; |
||||||
servers: object[] |
servers: object[]; |
||||||
model: number |
model: number; |
||||||
editModel: object |
editModel: object; |
||||||
tableData: { |
tableData: { |
||||||
content: string, |
content: string; |
||||||
param: { |
param: { |
||||||
serverId: number |
servers: object; |
||||||
content: string |
serverId: number; |
||||||
popType: number |
content: string; |
||||||
popTo: number |
popType: number; |
||||||
uids: string |
popTo: number; |
||||||
noticeId: number |
uids: string; |
||||||
}; |
noticeId: number; |
||||||
}; |
}; |
||||||
editModelVisible: boolean, |
}; |
||||||
listModelVisible: boolean, |
editModelVisible: boolean; |
||||||
contentVisible: boolean, |
listModelVisible: boolean; |
||||||
serverSwitch: number, |
contentVisible: boolean; |
||||||
serverCategorize: object[], |
serverSwitch: number; |
||||||
|
serverCategorize: object[]; |
||||||
} |
} |
||||||
|
|
||||||
export default defineComponent({ |
export default defineComponent({ |
||||||
name: 'apiV1GameNoticePop', |
name: 'apiV1GameNoticePop', |
||||||
setup() { |
setup() { |
||||||
const state = reactive<TableDataState>({ |
const state = reactive<TableDataState>({ |
||||||
serverSwitch: 0, |
serverSwitch: 0, |
||||||
unselsected: ["", ""], |
unselsected: ['', ''], |
||||||
colorPicker: false, |
colorPicker: false, |
||||||
editModelVisible: false, |
editModelVisible: false, |
||||||
listModelVisible: false, |
listModelVisible: false, |
||||||
contentVisible: false, |
contentVisible: false, |
||||||
color: "#000000", |
color: '#000000', |
||||||
selected: "替换显示内容", |
selected: '替换显示内容', |
||||||
urlLink: "", |
urlLink: '', |
||||||
tableData: { |
tableData: { |
||||||
content: "", |
content: '', |
||||||
param: { |
param: { |
||||||
serverId: "", |
servers: [], |
||||||
content: "", |
serverId: '', |
||||||
uids: "", |
content: '', |
||||||
popType: 0, |
uids: '', |
||||||
popTo: 1, |
popType: 0, |
||||||
noticeId: 0 |
popTo: 1, |
||||||
}, |
noticeId: 0, |
||||||
}, |
}, |
||||||
dbs: [], |
}, |
||||||
servers: [], |
dbs: [], |
||||||
model: "", |
servers: [], |
||||||
editModel: {}, |
model: '', |
||||||
serverCategorize: ServerCategorize, |
editModel: {}, |
||||||
}); |
serverCategorize: ServerCategorize, |
||||||
const noticePop = () => { |
}); |
||||||
console.log("Notice: ", state.tableData.param); |
const noticePop = () => { |
||||||
gameNoticePop(state.tableData.param).then(() => { |
for (let i in state.tableData.param.servers) { |
||||||
ElMessage.success('发送成功'); |
let data = { |
||||||
}).finally(() => { |
serverId: state.tableData.param.servers[i], |
||||||
// state.loading = false; |
content: state.tableData.param.content, |
||||||
}) |
uids: state.tableData.param.uids, |
||||||
}; |
popType: state.tableData.param.popType, |
||||||
onMounted(() => { |
popTo: state.tableData.param.popTo, |
||||||
serverList().then(value => { |
noticeId: state.tableData.param.noticeId, |
||||||
state.servers = value; |
}; |
||||||
// console.log(" server : ", state.servers); |
console.log('Notice: ', data); |
||||||
}); |
gameNoticePop(data).then(() => { |
||||||
getModel(); |
ElMessage.success(data.serverId + '发送成功'); |
||||||
}); |
}).finally(() => { |
||||||
var inputSelect = (res: any) => { |
// state.loading = false; |
||||||
console.log(res, res.target.selectionStart, res.target.selectionEnd); |
}); |
||||||
let selectionStart = res.target.selectionStart; |
} |
||||||
let selectionEnd = res.target.selectionEnd; |
}; |
||||||
state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)]; |
onMounted(() => { |
||||||
if (selectionStart == selectionEnd) { |
serverList().then((value) => { |
||||||
console.log("same"); |
state.servers = value; |
||||||
state.selected = '替换显示内容'; |
// console.log(" server : ", state.servers); |
||||||
return |
}); |
||||||
} |
getModel(); |
||||||
state.selected = res.target.value.slice(selectionStart, selectionEnd); |
}); |
||||||
console.log(state.selected); |
var inputSelect = (res: any) => { |
||||||
}; |
console.log(res, res.target.selectionStart, res.target.selectionEnd); |
||||||
var changeContent = () => { |
let selectionStart = res.target.selectionStart; |
||||||
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1]; |
let selectionEnd = res.target.selectionEnd; |
||||||
}; |
state.unselsected = [state.tableData.param.content.slice(0, selectionStart), state.tableData.param.content.slice(selectionEnd)]; |
||||||
var inputBig = () => { |
if (selectionStart == selectionEnd) { |
||||||
if (state.unselsected[1].indexOf("[/b]") == 0) { |
console.log('same'); |
||||||
return |
state.selected = '替换显示内容'; |
||||||
} |
return; |
||||||
|
} |
||||||
|
state.selected = res.target.value.slice(selectionStart, selectionEnd); |
||||||
|
console.log(state.selected); |
||||||
|
}; |
||||||
|
var changeContent = () => { |
||||||
|
state.tableData.param.content = state.unselsected[0] + state.selected + state.unselsected[1]; |
||||||
|
}; |
||||||
|
var inputBig = () => { |
||||||
|
if (state.unselsected[1].indexOf('[/b]') == 0) { |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
if (state.selected.indexOf("[b]") > -1) { |
if (state.selected.indexOf('[b]') > -1) { |
||||||
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, ""); |
state.selected = state.selected.replace(/\[b]|\[\/b]/gi, ''); |
||||||
changeContent(); |
changeContent(); |
||||||
return; |
return; |
||||||
} |
} |
||||||
state.selected = "[b]" + state.selected + "[/b]"; |
state.selected = '[b]' + state.selected + '[/b]'; |
||||||
changeContent(); |
changeContent(); |
||||||
console.log(state.unselsected, state.selected.indexOf("[b]"), state.selected, state.tableData.param.content); |
console.log(state.unselsected, state.selected.indexOf('[b]'), state.selected, state.tableData.param.content); |
||||||
}; |
}; |
||||||
var inputItalic = () => { |
var inputItalic = () => { |
||||||
if (state.unselsected[1].indexOf("[/i]") == 0) { |
if (state.unselsected[1].indexOf('[/i]') == 0) { |
||||||
return |
return; |
||||||
} |
} |
||||||
if (state.selected.indexOf("[i]") > -1 || (state.unselsected[1].indexOf("[i]") == 0 && state.unselsected[1].indexOf("[/i]") > -1)) { |
if (state.selected.indexOf('[i]') > -1 || (state.unselsected[1].indexOf('[i]') == 0 && state.unselsected[1].indexOf('[/i]') > -1)) { |
||||||
state.selected = state.selected.replace(/\[i]|\[\/i]/gi, ""); |
state.selected = state.selected.replace(/\[i]|\[\/i]/gi, ''); |
||||||
changeContent(); |
changeContent(); |
||||||
return; |
return; |
||||||
} |
} |
||||||
state.selected = "[i]" + state.selected + "[/i]"; |
state.selected = '[i]' + state.selected + '[/i]'; |
||||||
changeContent(); |
changeContent(); |
||||||
console.log(state.unselsected, state.selected, state.tableData.param.content); |
console.log(state.unselsected, state.selected, state.tableData.param.content); |
||||||
}; |
}; |
||||||
var inputUnderline = () => { |
var inputUnderline = () => { |
||||||
if (state.unselsected[1].indexOf("[/u]") == 0) { |
if (state.unselsected[1].indexOf('[/u]') == 0) { |
||||||
return |
return; |
||||||
} |
} |
||||||
if (state.selected.indexOf("[u]") > -1) { |
if (state.selected.indexOf('[u]') > -1) { |
||||||
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, ""); |
state.selected = state.selected.replace(/\[u]|\[\/u]/gi, ''); |
||||||
changeContent(); |
changeContent(); |
||||||
return; |
return; |
||||||
} |
} |
||||||
state.selected = "[u]" + state.selected + "[/u]"; |
state.selected = '[u]' + state.selected + '[/u]'; |
||||||
changeContent(); |
changeContent(); |
||||||
console.log(state.unselsected, state.selected, state.tableData.param.content); |
console.log(state.unselsected, state.selected, state.tableData.param.content); |
||||||
}; |
}; |
||||||
var inputLink = () => { |
var inputLink = () => { |
||||||
if (state.selected.indexOf("[/url]") > -1) { |
if (state.selected.indexOf('[/url]') > -1) { |
||||||
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, ""); |
state.selected = state.selected.replace(/\[url=.*?]|\[\/url]/gi, ''); |
||||||
changeContent(); |
changeContent(); |
||||||
return; |
return; |
||||||
} |
} |
||||||
ElMessageBox.prompt('请输入Url', '提示', { |
ElMessageBox.prompt('请输入Url', '提示', { |
||||||
confirmButtonText: '确认', |
confirmButtonText: '确认', |
||||||
cancelButtonText: '取消', |
cancelButtonText: '取消', |
||||||
// inputPattern: |
// inputPattern: |
||||||
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/, |
// /[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?/, |
||||||
inputErrorMessage: 'Invalid http request', |
inputErrorMessage: 'Invalid http request', |
||||||
}).then(({value}) => { |
}).then(({ value }) => { |
||||||
state.urlLink = value; |
state.urlLink = value; |
||||||
if (state.unselsected[1].indexOf("[/url]") == 0) { |
if (state.unselsected[1].indexOf('[/url]') == 0) { |
||||||
return |
return; |
||||||
} |
} |
||||||
state.selected = "[url=" + state.urlLink + "]" + state.selected + "[/url]"; |
state.selected = '[url=' + state.urlLink + ']' + state.selected + '[/url]'; |
||||||
changeContent(); |
changeContent(); |
||||||
state.urlLink = ''; |
state.urlLink = ''; |
||||||
console.log(state.unselsected, state.selected, state.tableData.param.content); |
console.log(state.unselsected, state.selected, state.tableData.param.content); |
||||||
}); |
}); |
||||||
|
}; |
||||||
}; |
var buttonColor = () => { |
||||||
var buttonColor = () => { |
// if(state.selected.indexOf("[/color]") > -1){ |
||||||
// if(state.selected.indexOf("[/color]") > -1){ |
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); |
||||||
// state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); |
// changeContent(); |
||||||
// changeContent(); |
// } |
||||||
// } |
}; |
||||||
}; |
var inputColor = () => { |
||||||
var inputColor = () => { |
if (!state.color || state.color == '#000000') { |
||||||
if (!state.color || state.color == "#000000") { |
if (state.selected.indexOf('[/color]') > -1) { |
||||||
if (state.selected.indexOf("[/color]") > -1) { |
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ''); |
||||||
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); |
changeContent(); |
||||||
changeContent(); |
return; |
||||||
return; |
} |
||||||
} |
return; |
||||||
return; |
} |
||||||
} |
if (state.unselsected[1].indexOf('[/color]') == 0) { |
||||||
if (state.unselsected[1].indexOf("[/color]") == 0) { |
return; |
||||||
return |
} |
||||||
} |
if (state.selected.indexOf('[/color]') > -1) { |
||||||
if (state.selected.indexOf("[/color]") > -1) { |
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ''); |
||||||
state.selected = state.selected.replace(/\[color=#.+?]|\[\/color]/gi, ""); |
// changeContent(); |
||||||
// changeContent(); |
// return; |
||||||
// return; |
} |
||||||
} |
state.selected = '[color=' + state.color + ']' + state.selected + '[/color]'; |
||||||
state.selected = "[color=" + state.color + "]" + state.selected + "[/color]"; |
changeContent(); |
||||||
changeContent(); |
console.log(state.unselsected, state.selected, state.tableData.param.content); |
||||||
console.log(state.unselsected, state.selected, state.tableData.param.content); |
}; |
||||||
}; |
// 模板 |
||||||
// 模板 |
const getModel = () => { |
||||||
const getModel = () => { |
gameGMNoticeModelGet({ noticeType: 1 }).then((res) => { |
||||||
gameGMNoticeModelGet({noticeType: 1}).then((res) => { |
console.log(res); |
||||||
console.log(res); |
if (res.data.noticeModel) { |
||||||
if (res.data.noticeModel) { |
state.dbs = res.data.noticeModel; |
||||||
state.dbs = res.data.noticeModel; |
} |
||||||
} |
}); |
||||||
}) |
}; |
||||||
}; |
const useModel = () => { |
||||||
const useModel = () => { |
let model = state.dbs.find((r) => r.id == state.model); |
||||||
let model = state.dbs.find(r => r.id == state.model); |
if (model) { |
||||||
if (model) { |
state.tableData.param.content = model.content; |
||||||
state.tableData.param.content = model.content; |
} |
||||||
} |
}; |
||||||
}; |
const makeModel = () => { |
||||||
const makeModel = () => { |
state.listModelVisible = true; |
||||||
state.listModelVisible = true; |
console.log(state); |
||||||
console.log(state); |
}; |
||||||
}; |
const setModel = (type: number, id: number) => { |
||||||
const setModel = (type: number, id: number) => { |
switch (type) { |
||||||
switch (type) { |
case 1: |
||||||
case 1: |
state.editModelVisible = true; |
||||||
state.editModelVisible = true; |
break; |
||||||
break; |
case 2: |
||||||
case 2: |
state.editModel = state.dbs.find((model) => model.id == id); |
||||||
state.editModel = state.dbs.find(model => model.id == id); |
state.editModelVisible = true; |
||||||
state.editModelVisible = true; |
break; |
||||||
break; |
case 3: |
||||||
case 3: |
// state.dbs = state.dbs.filter(model => model.id != id); |
||||||
// state.dbs = state.dbs.filter(model => model.id != id); |
// for (let i = 0; i < state.dbs.length; i++) { |
||||||
// for (let i = 0; i < state.dbs.length; i++) { |
// let model = state.dbs[i]; |
||||||
// let model = state.dbs[i]; |
// if (model) { |
||||||
// if (model) { |
// model.id = i + 1; |
||||||
// model.id = i + 1; |
// } |
||||||
// } |
// } |
||||||
// } |
gameGMNoticeModelDel({ |
||||||
gameGMNoticeModelDel({ |
id: id, |
||||||
id: id, |
}) |
||||||
}).then(function () { |
.then(function () { |
||||||
getModel() |
getModel(); |
||||||
}).finally(function () { |
}) |
||||||
}); |
.finally(function () {}); |
||||||
break; |
break; |
||||||
} |
} |
||||||
}; |
}; |
||||||
const saveModel = (type: number) => { |
const saveModel = (type: number) => { |
||||||
console.log(type, state.editModel); |
console.log(type, state.editModel); |
||||||
switch (type) { |
switch (type) { |
||||||
case 1: |
case 1: |
||||||
gameGMNoticeModelAdd({ |
gameGMNoticeModelAdd({ |
||||||
id: state.editModel.id, |
id: state.editModel.id, |
||||||
title: state.editModel.title, |
title: state.editModel.title, |
||||||
content: state.editModel.content, |
content: state.editModel.content, |
||||||
noticeType: 1 |
noticeType: 1, |
||||||
}).then(function () { |
}) |
||||||
getModel() |
.then(function () { |
||||||
}).finally(function () { |
getModel(); |
||||||
state.editModelVisible = false; |
}) |
||||||
}); |
.finally(function () { |
||||||
break; |
state.editModelVisible = false; |
||||||
case 2: |
}); |
||||||
state.listModelVisible = false; |
break; |
||||||
// gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){ |
case 2: |
||||||
// }).finally(function(){ |
state.listModelVisible = false; |
||||||
// state.listModelVisible = false; |
// gameUpdateModel({model: JSON.stringify(state.models)}).then(function(){ |
||||||
// }); |
// }).finally(function(){ |
||||||
break; |
// state.listModelVisible = false; |
||||||
} |
// }); |
||||||
}; |
break; |
||||||
const handleClose = (done: () => void) => { |
} |
||||||
// ElMessageBox.confirm('确定退出编辑模板页面?').then(() => { |
}; |
||||||
done() |
const handleClose = (done: () => void) => { |
||||||
// }).catch(() => { |
// ElMessageBox.confirm('确定退出编辑模板页面?').then(() => { |
||||||
// // catch error |
done(); |
||||||
// }) |
// }).catch(() => { |
||||||
}; |
// // catch error |
||||||
const showContent = () => { |
// }) |
||||||
state.contentVisible = true; |
}; |
||||||
state.tableData.content = contentReplace(state.tableData.param.content); |
const showContent = () => { |
||||||
console.log(state.tableData.content) |
state.contentVisible = true; |
||||||
}; |
state.tableData.content = contentReplace(state.tableData.param.content); |
||||||
const switchServer = () => { |
console.log(state.tableData.content); |
||||||
return gSwitchServer(state.serverSwitch, state.servers) |
}; |
||||||
}; |
const switchServer = () => { |
||||||
return { |
return gSwitchServer(state.serverSwitch, state.servers); |
||||||
switchServer, |
}; |
||||||
showContent, |
return { |
||||||
noticePop, |
switchServer, |
||||||
inputSelect, |
showContent, |
||||||
inputBig, |
noticePop, |
||||||
inputItalic, |
inputSelect, |
||||||
inputUnderline, |
inputBig, |
||||||
inputLink, |
inputItalic, |
||||||
inputColor, |
inputUnderline, |
||||||
buttonColor, |
inputLink, |
||||||
getModel, |
inputColor, |
||||||
useModel, |
buttonColor, |
||||||
makeModel, |
getModel, |
||||||
setModel, |
useModel, |
||||||
saveModel, |
makeModel, |
||||||
handleClose, |
setModel, |
||||||
...toRefs(state), |
saveModel, |
||||||
}; |
handleClose, |
||||||
}, |
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
}); |
}); |
||||||
</script> |
</script> |
||||||
<style scoped lang="scss" src="../../../theme/add.scss"></style> |
<style scoped lang="scss" src="../../../theme/add.scss"></style> |
||||||
<style scoped lang="scss"> |
<style scoped lang="scss"> |
||||||
.my-header { |
.my-header { |
||||||
display: flex; |
display: flex; |
||||||
flex-direction: row; |
flex-direction: row; |
||||||
justify-content: space-between; |
justify-content: space-between; |
||||||
gap: 16px; |
gap: 16px; |
||||||
} |
} |
||||||
|
|
||||||
.tree-border { |
.tree-border { |
||||||
margin-top: 5px; |
margin-top: 5px; |
||||||
border: 1px solid #e5e6e7 !important; |
border: 1px solid #e5e6e7 !important; |
||||||
background: #fff none !important; |
background: #fff none !important; |
||||||
border-radius: 4px; |
border-radius: 4px; |
||||||
} |
} |
||||||
|
|
||||||
.system-edit-post-container { |
.system-edit-post-container { |
||||||
.menu-data-tree { |
.menu-data-tree { |
||||||
border: var(--el-input-border, var(--el-border-base)); |
border: var(--el-input-border, var(--el-border-base)); |
||||||
border-radius: var(--el-input-border-radius, var(--el-border-radius-base)); |
border-radius: var(--el-input-border-radius, var(--el-border-radius-base)); |
||||||
padding: 5px; |
padding: 5px; |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
.el-form--inline .el-form-item { |
.el-form--inline .el-form-item { |
||||||
display: -moz-flex; |
display: -moz-flex; |
||||||
vertical-align: middle; |
vertical-align: middle; |
||||||
margin-right: 32px; |
margin-right: 32px; |
||||||
} |
} |
||||||
</style> |
</style> |
||||||
|
@ -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> |
@ -1,187 +1,196 @@ |
|||||||
<template> |
<template> |
||||||
<div class="game-online-container"> |
<div class="game-online-container"> |
||||||
<el-card shadow="hover"> |
<el-card shadow="hover"> |
||||||
<div class="system-user-search mb15"> |
<div class="system-user-search mb15"> |
||||||
<el-form :inline="true"> |
<el-form :inline="true"> |
||||||
<el-form-item label="选择服务器" prop="serverId"> |
<el-form-item label="选择服务器" prop="serverId"> |
||||||
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
||||||
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value"/> |
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
||||||
</el-select> |
</el-select> |
||||||
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> |
<el-select v-model="tableData.param.serverId" class="m-2" placeholder="选择服务器" size="large" filterable> |
||||||
<el-option v-for="item in switchServer()" :key="item.id+''" :label="item.name" :value="item.id+''"/> |
<el-option v-for="item in switchServer()" :key="item.id + ''" :label="item.name" :value="item.id + ''" /> |
||||||
</el-select> |
</el-select> |
||||||
</el-form-item> |
</el-form-item> |
||||||
|
|
||||||
<el-form-item> |
<el-form-item> |
||||||
<el-button size="default" type="primary" class="ml10" @click="onlineList"> |
<el-button size="default" type="primary" class="ml10" @click="onlineList"> |
||||||
<el-icon> |
<el-icon> |
||||||
<ele-Search/> |
<ele-Search /> |
||||||
</el-icon> |
</el-icon> |
||||||
查询 |
查询 |
||||||
</el-button> |
</el-button> |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form> |
</el-form> |
||||||
</div> |
</div> |
||||||
<div v-if="!tableData.param.serverId"> |
<div v-if="!tableData.param.serverId"> |
||||||
<div class="system-user-search mb15"> |
<div class="system-user-search mb15"> |
||||||
<el-form :inline="true"> |
<el-form :inline="true"> |
||||||
<el-form-item label="总在线数量" prop="serverId"> |
<el-form-item label="总在线数量" prop="serverId"> |
||||||
{{ tableData.TotalNumber }} |
{{ tableData.TotalNumber }} |
||||||
</el-form-item> |
</el-form-item> |
||||||
</el-form> |
</el-form> |
||||||
</div> |
</div> |
||||||
<div class="system-user-search mb15"> |
<div class="system-user-search mb15"> |
||||||
<div v-for="(num,k) in tableData.topNumbers" :key="k"> |
<div v-for="(num, k) in tableData.topNumbers" :key="k"> |
||||||
<el-form :inline="true"> |
<el-form :inline="true"> |
||||||
<el-form-item> |
<el-form-item> {{ servers.find((res) => res.id == k).name }}:</el-form-item> |
||||||
{{ servers.find(res => res.id == k).name }}: |
<el-form-item label="在线数量"> |
||||||
</el-form-item> |
{{ tableData.Numbers[k] || 0 }} |
||||||
<el-form-item label="在线数量"> |
</el-form-item> |
||||||
{{ tableData.Numbers[k] || 0 }} |
<el-form-item label="最高在线数量"> |
||||||
</el-form-item> |
{{ num }} |
||||||
<el-form-item label="最高在线数量"> |
</el-form-item> |
||||||
{{ num }} |
</el-form> |
||||||
</el-form-item> |
</div> |
||||||
</el-form> |
</div> |
||||||
</div> |
</div> |
||||||
</div> |
<div v-else> |
||||||
</div> |
<div class="system-user-search mb15"> |
||||||
<div v-else> |
<el-form :inline="true"> |
||||||
<div class="system-user-search mb15"> |
<el-form-item label="在线数量"> |
||||||
<el-form :inline="true"> |
{{ tableData.Number }} |
||||||
<el-form-item label="在线数量"> |
</el-form-item> |
||||||
{{ tableData.Number }} |
<el-form-item label="最高在线数量"> |
||||||
</el-form-item> |
{{ tableData.topNumbers[tableData.param.serverId] || 0 }} |
||||||
<el-form-item label="最高在线数量"> |
</el-form-item> |
||||||
{{ tableData.topNumbers[tableData.param.serverId] || 0 }} |
</el-form> |
||||||
</el-form-item> |
</div> |
||||||
</el-form> |
<el-table :data="tableData.data" style="width: 100%"> |
||||||
</div> |
<el-table-column type="index" label="序号" width="60" /> |
||||||
<el-table :data="tableData.data" style="width: 100%"> |
<!-- <el-table-column prop="connectId" label="连接服务器" show-overflow-tooltip></el-table-column>--> |
||||||
<el-table-column type="index" label="序号" width="60"/> |
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> |
||||||
<!-- <el-table-column prop="connectId" label="连接服务器" show-overflow-tooltip></el-table-column>--> |
<el-table-column prop="Account" label="UniqueId" show-overflow-tooltip></el-table-column> |
||||||
<el-table-column prop="uid" label="uid" show-overflow-tooltip></el-table-column> |
<!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>--> |
||||||
<el-table-column prop="Account" label="UniqueId" show-overflow-tooltip></el-table-column> |
<!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>--> |
||||||
<!-- <el-table-column prop="address" label="IP地址" show-overflow-tooltip></el-table-column>--> |
</el-table> |
||||||
<!-- <el-table-column prop="loginTime" label="登录时间" show-overflow-tooltip></el-table-column>--> |
<el-pagination |
||||||
</el-table> |
:hide-on-single-page="true" |
||||||
<el-pagination :hide-on-single-page="true" v-show="tableData.total>0" :total="tableData.total" |
v-show="tableData.total > 0" |
||||||
v-model:page-size="tableData.param.pageNum" |
:total="tableData.total" |
||||||
v-model:current-page="tableData.param.pageSize" |
v-model:page-size="tableData.param.pageNum" |
||||||
@pagination="onlineList" |
v-model:current-page="tableData.param.pageSize" |
||||||
/> |
@pagination="onlineList" |
||||||
</div> |
/> |
||||||
</el-card> |
</div> |
||||||
</div> |
</el-card> |
||||||
|
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import {toRefs, reactive, onMounted, defineComponent,} from 'vue'; |
import { toRefs, reactive, onMounted, defineComponent } from 'vue'; |
||||||
//import { ElMessageBox, ElMessage } from 'element-plus'; |
//import { ElMessageBox, ElMessage } from 'element-plus'; |
||||||
// import EditRole from '/@/views/system/role/component/editRole.vue'; |
// import EditRole from '/@/views/system/role/component/editRole.vue'; |
||||||
import {allServerList, ServerCategorize, ServerList} from "/@/utils/game"; |
import { allServerList, ServerCategorize, ServerList } from '/@/utils/game'; |
||||||
import {gameOnlineList, gameOnlineTopList} from "/@/api/game"; |
import { gameOnlineList, gameOnlineTopList } from '/@/api/game'; |
||||||
import {gSwitchServer} from "/@/utils/utils"; |
import { gSwitchServer } from '/@/utils/utils'; |
||||||
|
|
||||||
// 定义接口来定义对象的类型 |
// 定义接口来定义对象的类型 |
||||||
interface TableData { |
interface TableData { |
||||||
connectId: number; |
connectId: number; |
||||||
uid: number; |
uid: number; |
||||||
address: string; |
address: string; |
||||||
loginTime: string; |
loginTime: string; |
||||||
} |
} |
||||||
|
|
||||||
interface TableDataState { |
interface TableDataState { |
||||||
serverSwitch: number; |
serverSwitch: number; |
||||||
tableData: { |
tableData: { |
||||||
data: Array<TableData>; |
data: Array<TableData>; |
||||||
param: { |
param: { |
||||||
serverId: number; |
serverId: number; |
||||||
} |
}; |
||||||
TotalNumber: number; |
TotalNumber: number; |
||||||
Numbers: object; |
Numbers: object; |
||||||
topNumbers: object; |
topNumbers: object; |
||||||
total: number; |
total: number; |
||||||
}; |
}; |
||||||
servers: object[] |
topOnlineCount: number; |
||||||
serverCategorize: object[]; |
servers: object[]; |
||||||
|
serverCategorize: object[]; |
||||||
} |
} |
||||||
|
|
||||||
export default defineComponent({ |
export default defineComponent({ |
||||||
name: 'apiV1GameRoleOnline', |
name: 'apiV1GameRoleOnline', |
||||||
setup() { |
setup() { |
||||||
const state = reactive<TableDataState>({ |
const state = reactive<TableDataState>({ |
||||||
serverSwitch: 0, |
serverSwitch: 0, |
||||||
tableData: { |
tableData: { |
||||||
data: [], |
data: [], |
||||||
param: { |
param: { |
||||||
serverId: "" |
serverId: '', |
||||||
}, |
}, |
||||||
Numbers: {}, |
Numbers: {}, |
||||||
topNumbers: {}, |
topNumbers: {}, |
||||||
TotalNumber: 0, |
TotalNumber: 0, |
||||||
Number: 0, |
Number: 0, |
||||||
topNumber: 0, |
topNumber: 0, |
||||||
total: 0, |
total: 0, |
||||||
}, |
}, |
||||||
servers: ServerList, |
topOnlineCount: 0, |
||||||
serverCategorize: ServerCategorize |
servers: ServerList, |
||||||
}); |
serverCategorize: ServerCategorize, |
||||||
const onlineList = () => { |
}); |
||||||
// const data: Array<any> = []; |
const onlineList = () => { |
||||||
state.tableData.TotalNumber = 0; |
// const data: Array<any> = []; |
||||||
if (state.tableData.param.serverId == "") { |
state.tableData.TotalNumber = 0; |
||||||
for (let server in state.servers) { |
if (state.tableData.param.serverId == '') { |
||||||
onlines(state.servers[server].id) |
for (let server in state.servers) { |
||||||
} |
onlines(state.servers[server].id); |
||||||
} else { |
} |
||||||
const data: Array<any> = []; |
} else { |
||||||
gameOnlineList(state.tableData.param).then(res => { |
const data: Array<any> = []; |
||||||
console.log(res.data); |
gameOnlineList(state.tableData.param).then((res) => { |
||||||
const list = res.data.onlines ?? []; |
console.log(res.data); |
||||||
state.tableData.Number = res.data.total; |
const list = res.data.onlines ?? []; |
||||||
list.map((item: any) => { |
state.tableData.Number = res.data.total; |
||||||
data.push({ |
list.map((item: any) => { |
||||||
uid: item.id, |
data.push({ |
||||||
Account: item.uid, |
uid: item.id, |
||||||
}); |
Account: item.uid, |
||||||
}); |
}); |
||||||
state.tableData.data = data; |
}); |
||||||
}); |
state.tableData.data = data; |
||||||
} |
}); |
||||||
gameOnlineTopList(state.tableData.param).then(res => { |
} |
||||||
console.log(res.data); |
if (state.topOnlineCount == 0) { |
||||||
const list = res.data.onlines ?? []; |
state.topOnlineCount = 1; |
||||||
for (let i in list) { |
setTimeout(function () { |
||||||
state.tableData.topNumbers[list[i].server] = list[i].num; |
state.topOnlineCount = 0; |
||||||
} |
}, 30000); |
||||||
}) |
gameOnlineTopList(state.tableData.param).then((res) => { |
||||||
}; |
console.log("gameOnlineTopList: ", res.data); |
||||||
const onlines = (server: number) => { |
const list = res.data.onlines ?? []; |
||||||
if (!server) { |
for (let i in list) { |
||||||
return; |
state.tableData.topNumbers[list[i].server] = list[i].num; |
||||||
} |
} |
||||||
gameOnlineList({serverId: server}).then(res => { |
}); |
||||||
console.log(res.data); |
} |
||||||
state.tableData.Numbers[server] = res.data.total; |
}; |
||||||
state.tableData.TotalNumber += res.data.total; |
const onlines = (server: number) => { |
||||||
}); |
if (!server) { |
||||||
}; |
return; |
||||||
// 页面加载时 |
} |
||||||
onMounted(() => { |
gameOnlineList({ serverId: server }).then((res) => { |
||||||
allServerList().then(res => { |
console.log('server: ', server, ' data: ', res.data); |
||||||
// console.log(res); |
state.tableData.Numbers[server] = res.data.total; |
||||||
state.servers = res; |
state.tableData.TotalNumber += res.data.total; |
||||||
}) |
}); |
||||||
}); |
}; |
||||||
const switchServer = () => { |
// 页面加载时 |
||||||
return gSwitchServer(state.serverSwitch, state.servers) |
onMounted(() => { |
||||||
}; |
allServerList().then((res) => { |
||||||
return { |
// console.log(res); |
||||||
switchServer, |
state.servers = res; |
||||||
onlineList, |
}); |
||||||
...toRefs(state), |
}); |
||||||
}; |
const switchServer = () => { |
||||||
}, |
return gSwitchServer(state.serverSwitch, state.servers); |
||||||
|
}; |
||||||
|
return { |
||||||
|
switchServer, |
||||||
|
onlineList, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
}); |
}); |
||||||
</script> |
</script> |
||||||
|
@ -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> |
@ -1,156 +1,185 @@ |
|||||||
<template> |
<template> |
||||||
<div class="system-role-container"> |
<div class="system-role-container"> |
||||||
<el-card shadow="hover" header="审核模式设置"> |
<el-card shadow="hover" :header="setName.label + '设置'"> |
||||||
<el-form> |
<el-form :inline="true"> |
||||||
<el-form-item> |
<el-form-item label="选择设置模式"> |
||||||
<el-button type="primary" @click="onOpenAdd()"> |
<el-select v-model="tableData.param.name" class="m-2" @change="changeName" placeholder="选择设置模式" filterable> |
||||||
<el-icon> |
<el-option v-for="item in names" :key="item" :label="item.label" :value="item.value" /> |
||||||
<ele-FolderAdd/> |
</el-select> |
||||||
</el-icon> |
</el-form-item> |
||||||
新增 |
<el-form-item> |
||||||
</el-button> |
<el-button type="primary" @click="onOpenAdd()"> |
||||||
</el-form-item> |
<el-icon> |
||||||
</el-form> |
<ele-FolderAdd /> |
||||||
<el-table :data="tableData.data" style="width: 100%"> |
</el-icon> |
||||||
<el-table-column prop="label" label="渠道" width="200"> |
新增 |
||||||
<template #default="scope"> |
</el-button> |
||||||
{{ channels.find(r => r.value == scope.row.label.substring(0, 12))?channels.find(r => r.value == scope.row.label.substring(0, 12)).label: scope.row.label.substring(0, 12)}} |
</el-form-item> |
||||||
</template> |
</el-form> |
||||||
</el-table-column> |
<el-table :data="tableData.data" style="width: 100%"> |
||||||
<el-table-column prop="label" label="版本号" width="200"> |
<el-table-column prop="label" label="渠道(优先判断)" width="200"> |
||||||
<template #default="scope"> |
<template #default="scope"> |
||||||
{{ scope.row.label.substring(12) }} |
<div v-if="scope.row.label.length >= 12"> |
||||||
</template> |
{{ |
||||||
</el-table-column> |
channels.find((r) => r.value == scope.row.label.substring(0, 12)) |
||||||
<el-table-column prop="value" label="审核模式" show-overflow-tooltip width="100"> |
? channels.find((r) => r.value == scope.row.label.substring(0, 12)).label |
||||||
<template #default="scope"> |
: scope.row.label.substring(0, 12) |
||||||
<div v-if="scope.row.value==0">否</div> |
}} |
||||||
<div v-if="scope.row.value==1">是</div> |
</div> |
||||||
</template> |
<div v-if="scope.row.label.length < 12"> |
||||||
</el-table-column> |
{{ channels.find((r) => r.value == '') ? channels.find((r) => r.value == '').label : '' }} |
||||||
<el-table-column prop="value" label="操作" show-overflow-tooltip width="100"> |
</div> |
||||||
<template #default="scope"> |
</template> |
||||||
<el-button size="small" type="text" @click="onRowDel(scope.row)">删除 |
</el-table-column> |
||||||
</el-button> |
<el-table-column prop="label" label="版本号" width="200"> |
||||||
<el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改 |
<template #default="scope"> |
||||||
</el-button> |
<div v-if="scope.row.label.length > 12"> |
||||||
</template> |
{{ scope.row.label.substring(12) }} |
||||||
</el-table-column> |
</div> |
||||||
</el-table> |
<div v-if="scope.row.label.length < 12">{{ scope.row.label }}</div> |
||||||
</el-card> |
<div v-else>所有版本</div> |
||||||
<EditConfig ref="editDicRef" @mailList="mailList"/> |
</template> |
||||||
</div> |
</el-table-column> |
||||||
|
<el-table-column prop="value" :label="setName.label + '模式'" show-overflow-tooltip width="200"> |
||||||
|
<template #default="scope"> |
||||||
|
<div v-if="scope.row.value == 0">否</div> |
||||||
|
<div v-if="scope.row.value == 1">是</div> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
<el-table-column prop="value" label="操作" show-overflow-tooltip width="100"> |
||||||
|
<template #default="scope"> |
||||||
|
<el-button size="small" type="text" @click="onRowDel(scope.row)">删除</el-button> |
||||||
|
<el-button size="small" type="text" @click="onOpenEdit(scope.row)">修改</el-button> |
||||||
|
</template> |
||||||
|
</el-table-column> |
||||||
|
</el-table> |
||||||
|
</el-card> |
||||||
|
<EditConfig ref="editDicRef" @mailList="mailList" /> |
||||||
|
</div> |
||||||
</template> |
</template> |
||||||
|
|
||||||
<script lang="ts"> |
<script lang="ts"> |
||||||
import {toRefs, reactive, onMounted, defineComponent, ref,} from 'vue'; |
import { toRefs, reactive, onMounted, defineComponent, ref } from 'vue'; |
||||||
import {allChannelList, serverList} from "/@/utils/game"; |
import { allChannelList, serverList, GameSetList } from '/@/utils/game'; |
||||||
import {ElMessage, ElMessageBox} from 'element-plus'; |
import { ElMessage, ElMessageBox } from 'element-plus'; |
||||||
import {gameDelAuditMode, gameGetAllAuditMode} from "/@/api/game/set"; |
import { gameDelAuditMode, gameGetAllAuditMode } from '/@/api/game/set'; |
||||||
import EditConfig from "/@/views/gameBug/clientBug/component/editConfig.vue"; |
import EditConfig from '/src/views/gameSet/auditMode/component/editConfig.vue'; |
||||||
|
|
||||||
interface TableDataState { |
interface TableDataState { |
||||||
contentVisible: boolean; |
contentVisible: boolean; |
||||||
ItemConfig: object; |
ItemConfig: object; |
||||||
tableData: { |
tableData: { |
||||||
data: object[]; |
data: object[]; |
||||||
total: number; |
total: number; |
||||||
content: string; |
content: string; |
||||||
param: {}; |
param: {}; |
||||||
}; |
name: string; |
||||||
servers: object[] |
}; |
||||||
channels: object[] |
servers: object[]; |
||||||
|
channels: object[]; |
||||||
|
setName: object; |
||||||
|
names: object[]; |
||||||
} |
} |
||||||
|
|
||||||
export default defineComponent({ |
export default defineComponent({ |
||||||
name: 'apiV1ClientBugList', |
name: 'apiV1ClientBugList', |
||||||
components: {EditConfig}, |
components: { EditConfig }, |
||||||
setup() { |
setup() { |
||||||
const editDicRef = ref(); |
const editDicRef = ref(); |
||||||
const state = reactive<TableDataState>({ |
const state = reactive<TableDataState>({ |
||||||
contentVisible: false, |
contentVisible: false, |
||||||
tableData: { |
tableData: { |
||||||
data: [], |
data: [], |
||||||
total: 0, |
total: 0, |
||||||
content: "", |
content: '', |
||||||
param: {}, |
param: { |
||||||
}, |
name: GameSetList[0].value, |
||||||
channels: [] |
}, |
||||||
}); |
}, |
||||||
|
channels: [], |
||||||
|
setName: GameSetList[0], |
||||||
|
names: GameSetList, |
||||||
|
}); |
||||||
|
|
||||||
const mailList = () => { |
const mailList = () => { |
||||||
gameGetAllAuditMode().then(res => { |
gameGetAllAuditMode(state.tableData.param).then((res) => { |
||||||
console.log(res); |
console.log(res); |
||||||
state.tableData.data = []; |
state.tableData.data = []; |
||||||
if (res.data) { |
if (res.data) { |
||||||
let data = res.data.list ?? []; |
let data = res.data.list ?? []; |
||||||
for (let i in data) { |
for (let i in data) { |
||||||
console.log(data[i], i); |
console.log(data[i], i); |
||||||
state.tableData.data.push({ |
state.tableData.data.push({ |
||||||
label: i, |
label: i, |
||||||
value: data[i], |
value: data[i], |
||||||
}) |
}); |
||||||
} |
} |
||||||
} |
} |
||||||
}) |
}); |
||||||
}; |
}; |
||||||
|
|
||||||
// 分页改变 |
// 分页改变 |
||||||
const onHandleCurrentChange = () => { |
const onHandleCurrentChange = () => { |
||||||
console.log(`current page: ${state.tableData.param.pageNum}`); |
console.log(`current page: ${state.tableData.param.pageNum}`); |
||||||
mailList(); |
mailList(); |
||||||
}; |
}; |
||||||
|
|
||||||
const onRowDel = (row: any) => { |
const onRowDel = (row: any) => { |
||||||
ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', { |
ElMessageBox.confirm(`此操作将删除:“${row.label}”的设置,是否继续?`, '提示', { |
||||||
confirmButtonText: '确认', |
confirmButtonText: '确认', |
||||||
cancelButtonText: '取消', |
cancelButtonText: '取消', |
||||||
type: 'warning', |
type: 'warning', |
||||||
}).then(() => { |
}) |
||||||
gameDelAuditMode({label: row.label}).then(() => { |
.then(() => { |
||||||
ElMessage.success('完成bug成功'); |
gameDelAuditMode({ label: row.label }).then(() => { |
||||||
mailList(); |
ElMessage.success('完成bug成功'); |
||||||
}) |
mailList(); |
||||||
}).catch(() => { |
}); |
||||||
}); |
}) |
||||||
}; |
.catch(() => {}); |
||||||
|
}; |
||||||
|
|
||||||
// 页面加载时 |
// 页面加载时 |
||||||
onMounted(() => { |
onMounted(() => { |
||||||
serverList().then(value => { |
serverList().then((value) => { |
||||||
state.servers = value; |
state.servers = value; |
||||||
// console.log(" servers : ", state.servers); |
}); |
||||||
}); |
allChannelList().then((value) => { |
||||||
allChannelList().then(value => { |
state.channels = value; |
||||||
state.channels = value; |
}); |
||||||
// console.log(" channels : ", state.channels); |
mailList(); |
||||||
}); |
}); |
||||||
mailList(); |
// 打开新增字典弹窗 |
||||||
}); |
const onOpenAdd = () => { |
||||||
// 打开新增字典弹窗 |
editDicRef.value.openDialog({ auditMode: '1', channel: '', version: '', name: state.tableData.param.name }, state.setName, true); |
||||||
const onOpenAdd = () => { |
}; |
||||||
editDicRef.value.openDialog({auditMode: "1", channel: "", version: ""}); |
// 打开修改字典弹窗 |
||||||
}; |
const onOpenEdit = (row: any) => { |
||||||
// 打开修改字典弹窗 |
let data = { auditMode: row.value, channel: '', version: '', name: state.tableData.param.name }; |
||||||
const onOpenEdit = (row: any) => { |
if (row.label.length > 12) { |
||||||
let data = {auditMode: row.value, channel: "", version: ""} |
data.channel = row.label.substring(0, 12); |
||||||
if (row.label.length > 12) { |
data.version = row.label.substring(12); |
||||||
data.channel = row.label.substring(0, 12); |
} else if (row.label.length == 12) { |
||||||
data.version = row.label.substring(12); |
data.channel = row.label; |
||||||
} else if (row.label.length == 12) { |
} else if (row.label.length < 12) { |
||||||
data.channel = row.label; |
data.version = row.label; |
||||||
} |
} |
||||||
editDicRef.value.openDialog(data); |
editDicRef.value.openDialog(data, state.setName, false); |
||||||
}; |
}; |
||||||
return { |
const changeName = () => { |
||||||
editDicRef, |
state.setName = state.names.find((r) => r.value === state.tableData.param.name); |
||||||
onHandleCurrentChange, |
mailList(); |
||||||
onRowDel, |
}; |
||||||
mailList, |
return { |
||||||
onOpenAdd, |
editDicRef, |
||||||
onOpenEdit, |
onHandleCurrentChange, |
||||||
...toRefs(state), |
onRowDel, |
||||||
}; |
mailList, |
||||||
}, |
onOpenAdd, |
||||||
|
onOpenEdit, |
||||||
|
changeName, |
||||||
|
...toRefs(state), |
||||||
|
}; |
||||||
|
}, |
||||||
}); |
}); |
||||||
</script> |
</script> |
||||||
|
Loading…
Reference in new issue