You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
546 lines
20 KiB
546 lines
20 KiB
<template> |
|
<div class="game-maintenance-container"> |
|
<el-card shadow="hover" header="复制账号"> |
|
<template #header> |
|
复制账号 |
|
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretBottom /> |
|
</el-icon> |
|
</el-button> |
|
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretTop /> |
|
</el-icon> |
|
</el-button> |
|
</template> |
|
<div v-show="item.copyShow"> |
|
<div class="game-order-search mb15"> |
|
<el-form label-position="right" label-width="300px" style="max-width: 600px"> |
|
<el-form-item label="原账号"> |
|
<el-input v-model="tableData.data.SrcName" placeholder="请填写uid" class="w-50 m-2" clearable /> |
|
</el-form-item> |
|
<!-- <el-form-item label="原账号服务器">--> |
|
<!-- <el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" filterable>--> |
|
<!-- <el-option v-for="item in servers" :key="item.id" :label="item.name" :value="item.id" />--> |
|
<!-- </el-select>--> |
|
<!-- </el-form-item>--> |
|
<el-form-item label="原账号服务器" prop="SrcServer"> |
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
|
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
|
</el-select> |
|
<el-select v-model="tableData.data.SrcServer" class="m-2" placeholder="选择服务器" size="large" filterable> |
|
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item> |
|
<el-button size="large" type="primary" class="ml10" @click="copyUnit"> 复制</el-button> |
|
</el-form-item> |
|
<el-form-item> |
|
<el-button size="default" type="primary" @click="onDownload()" v-if="!disabled" :loading="loading && loading1 && loading2 && loading3"> |
|
<div v-if="loading && loading1 && loading2 && loading3">正在复制账号</div> |
|
<div v-else>下载账号json数据</div> |
|
</el-button> |
|
</el-form-item> |
|
<!-- <el-form-item>--> |
|
<!-- <el-button size="default" type="primary" @click="onDownload(filename)" v-if="!disabled" :loading="loading">--> |
|
<!-- <div v-if="loading">正在复制账号</div>--> |
|
<!-- <div v-else>下载账号json数据</div>--> |
|
<!-- </el-button>--> |
|
<!-- </el-form-item>--> |
|
<!-- <el-form-item inlist="true">--> |
|
<!-- <el-button size="default" type="primary" @click="onDownload(storeFilename)" v-if="!disabled" :loading="loading1">--> |
|
<!-- <div v-if="loading1">正在复制仓库</div>--> |
|
<!-- <div v-else>下载仓库json数据</div>--> |
|
<!-- </el-button>--> |
|
<!-- </el-form-item>--> |
|
<!-- <el-form-item inlist="true">--> |
|
<!-- <el-button size="default" type="primary" @click="onDownload(deadFilename)" v-if="!disabled" :loading="loading2">--> |
|
<!-- <div v-if="loading2">正在复制村民</div>--> |
|
<!-- <div v-else>下载村民json数据</div>--> |
|
<!-- </el-button>--> |
|
<!-- </el-form-item>--> |
|
<!-- <el-form-item inlist="true">--> |
|
<!-- <el-button size="default" type="primary" @click="onDownload(decorationFilename)" v-if="!disabled" :loading="loading3">--> |
|
<!-- <div v-if="loading3">正在复制装饰</div>--> |
|
<!-- <div v-else>下载装饰json数据</div>--> |
|
<!-- </el-button>--> |
|
<!-- </el-form-item>--> |
|
</el-form> |
|
</div> |
|
</div> |
|
</el-card> |
|
|
|
<el-card shadow="hover" header="载入账号信息"> |
|
<template #header> |
|
上载账号信息 |
|
<el-button v-show="item.copyShow == false" @click="item.copyShow = true" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretBottom /> |
|
</el-icon> |
|
</el-button> |
|
<el-button v-show="item.copyShow == true" @click="item.copyShow = false" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretTop /> |
|
</el-icon> |
|
</el-button> |
|
</template> |
|
<div v-show="item.copyShow"> |
|
<div class="game-order-search mb15"> |
|
<el-form label-position="right" label-width="300px" style="max-width: 600px"> |
|
<el-upload |
|
class="upload-demo" |
|
:action="baseURL + 'api/v1/pub/upload/singleFile'" |
|
:on-preview="handlePreview" |
|
:on-remove="handleRemove" |
|
:on-change="handleChange" |
|
:before-remove="beforeRemove" |
|
multiple |
|
:limit="4" |
|
:on-exceed="handleExceed" |
|
:file-list="fileList" |
|
> |
|
<el-button size="small" type="primary">点击上传</el-button> |
|
只能上传Json文件 |
|
</el-upload> |
|
<el-form-item label="unit文件名称"> |
|
<el-select v-model="tableData.data.filename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable> |
|
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="仓库文件名称"> |
|
<el-select v-model="tableData.data.storeFilename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable> |
|
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="村民文件名称"> |
|
<el-select v-model="tableData.data.deadFilename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable> |
|
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="装饰文件名称"> |
|
<el-select v-model="tableData.data.decorationFilename" class="m-2" placeholder="选择载入文件" style="width: 300px" filterable> |
|
<el-option v-for="item in tableData.fileNames" :key="item" :label="item" :value="item" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="目标账号"> |
|
<el-input v-model="tableData.data.DestName" placeholder="请填写uid" class="w-50 m-2" clearable /> |
|
</el-form-item> |
|
<el-form-item label="目标服务器" prop="DestServer"> |
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
|
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
|
</el-select> |
|
<el-select v-model="tableData.data.DestServer" class="m-2" placeholder="选择服务器" size="large" filterable> |
|
<el-option v-for="item in switchServer()" :key="item.id + ''" :label="item.name" :value="item.id" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item> |
|
<el-button size="large" type="primary" class="ml10" @click="updateUnit"> 更新</el-button> |
|
</el-form-item> |
|
</el-form> |
|
</div> |
|
</div> |
|
</el-card> |
|
<el-card shadow="hover" header="删除账号"> |
|
<template #header> |
|
删除账号 |
|
<el-button v-show="item.delShow == false" @click="item.delShow = true" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretBottom /> |
|
</el-icon> |
|
</el-button> |
|
<el-button v-show="item.delShow == true" @click="item.delShow = false" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretTop /> |
|
</el-icon> |
|
</el-button> |
|
</template> |
|
<div v-show="item.delShow"> |
|
<div class="game-order-search mb15"> |
|
<el-form label-position="right" label-width="300px" style="max-width: 600px"> |
|
<el-form-item label="账号"> |
|
<el-input v-model="tableData.del.SrcName" placeholder="" class="w-50 m-2" clearable /> |
|
</el-form-item> |
|
<el-form-item label="账号服务器"> |
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
|
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
|
</el-select> |
|
<el-select v-model="tableData.del.serverId" class="m-2" placeholder="选择服务器" filterable> |
|
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item> |
|
<el-button type="primary" class="ml10" @click="delAccount"> 删除账号</el-button> |
|
</el-form-item> |
|
</el-form> |
|
</div> |
|
</div> |
|
</el-card> |
|
<el-card shadow="hover"> |
|
<template #header> |
|
修改游戏登录密码 |
|
<el-button v-show="item.pwdShow == false" @click="item.pwdShow = true" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretBottom /> |
|
</el-icon> |
|
</el-button> |
|
<el-button v-show="item.pwdShow == true" @click="item.pwdShow = false" class="button-caret" type="text"> |
|
<el-icon> |
|
<ele-CaretTop /> |
|
</el-icon> |
|
</el-button> |
|
</template> |
|
<div class="game-order-search mb15" v-show="item.pwdShow"> |
|
<el-form label-position="right" label-width="300px" style="max-width: 600px"> |
|
<el-form-item label="account:"> |
|
<el-input v-model="tableData.password.account" placeholder="" class="w-50 m-2" size="large" clearable /> |
|
</el-form-item> |
|
<el-form-item label="账号服务器"> |
|
<el-select v-model="serverSwitch" class="m-2" placeholder="选择服务器" size="large" style="width: 80px"> |
|
<el-option v-for="item in serverCategorize" :key="item.value" :label="item.label" :value="item.value" /> |
|
</el-select> |
|
<el-select v-model="tableData.password.serverId" class="m-2" placeholder="选择服务器" filterable> |
|
<el-option v-for="item in switchServer()" :key="item.id" :label="item.name" :value="item.id" /> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="密码:"> |
|
<el-input v-model="tableData.password.pwd" placeholder="" class="w-50 m-2" size="large" clearable /> |
|
</el-form-item> |
|
<el-form-item> |
|
<el-button size="large" type="primary" class="ml10" @click="resetPwd"> 修改登录密码</el-button> |
|
</el-form-item> |
|
</el-form> |
|
</div> |
|
</el-card> |
|
</div> |
|
</template> |
|
|
|
<script lang="ts"> |
|
import { toRefs, reactive, onMounted, defineComponent, warn } from 'vue'; |
|
import { ElMessage, ElMessageBox } from 'element-plus'; |
|
import { gameGMClearResource, gameGMCopyUnit, gameGMUpdateUnit, gameGMDelAccount, gameResetPwd, giftExchangeExists } from '/@/api/game'; |
|
import { gSwitchServer } from '/@/utils/utils'; |
|
import { AllServerList, ServerCategorize, serverList } from '/@/utils/game'; |
|
|
|
const baseURL: string | undefined | boolean = import.meta.env.VITE_API_URL; |
|
|
|
interface TableData { |
|
filename: string; |
|
storeFilename: string; |
|
deadFilename: string; |
|
decorationFilename: string; |
|
SrcName: number; |
|
SrcServer: number; |
|
DestName: string; |
|
DestServer: number; |
|
} |
|
|
|
interface DelData { |
|
SrcName: string; |
|
serverId: number; |
|
password: string; |
|
} |
|
|
|
interface TableDataState { |
|
item: { copyShow: boolean; delShow: boolean; pwdShow: boolean; resourceShow: boolean }; |
|
tableData: { |
|
data: TableData; |
|
del: DelData; |
|
password: { |
|
account: string; |
|
serverId: number; |
|
pwd: string; |
|
}; |
|
resource: { |
|
account: string; |
|
serverId: number; |
|
}; |
|
fileNames: string[]; |
|
downloadFiles: string[]; |
|
}; |
|
servers: object[]; |
|
disabled: boolean; |
|
loading: boolean; |
|
loading1: boolean; |
|
loading2: boolean; |
|
loading3: boolean; |
|
fileList: object[]; |
|
filename: string; |
|
storeFilename: string; |
|
deadFilename: string; |
|
decorationFilename: string; |
|
serverSwitch: number; |
|
serverCategorize: object; |
|
} |
|
|
|
var timeInterval; |
|
var timeInterval1; |
|
var timeInterval2; |
|
var timeInterval3; |
|
export default defineComponent({ |
|
name: 'apiV1GameMangeCopyUnit', |
|
setup() { |
|
const state = reactive<TableDataState>({ |
|
serverSwitch: 0, |
|
fileList: [], |
|
baseURL: baseURL, |
|
item: { copyShow: true, delShow: false, pwdShow: false, resourceShow: false }, |
|
tableData: { |
|
data: { |
|
SrcName: '', |
|
SrcServer: '', |
|
}, |
|
del: { |
|
SrcName: '', |
|
serverId: '', |
|
password: '', |
|
}, |
|
password: { |
|
account: '', |
|
serverId: '', |
|
pwd: '', |
|
}, |
|
resource: { |
|
account: '', |
|
}, |
|
fileNames: [], |
|
downloadFiles: [], |
|
}, |
|
servers: AllServerList, |
|
disabled: true, |
|
loading: false, |
|
loading1: false, |
|
loading2: false, |
|
loading3: false, |
|
filename: '', |
|
storeFilename: '', |
|
deadFilename: '', |
|
decorationFilename: '', |
|
serverCategorize: ServerCategorize, |
|
}); |
|
const handleRemove = (file, fileList) => { |
|
console.log('handleRemove: ', file, fileList); |
|
}; |
|
const handlePreview = (file) => { |
|
console.log('handlePreview: ', file); |
|
}; |
|
const handleExceed = (files, fileList) => { |
|
console.log('handleExceed: ', files, fileList); |
|
warn(`当前限制选择 4 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); |
|
}; |
|
const handleChange = (files, fileList) => { |
|
console.log('handleChange: ', files, fileList); |
|
if (state.tableData.fileNames.indexOf(files.name) >= 0) { |
|
return; |
|
} |
|
warn(`当前限制选择 4 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`); |
|
let name = files.name.toLowerCase(); |
|
if (name.includes('unit') ) { |
|
state.tableData.data.filename = files.name; |
|
} else if (name.includes('store') ) { |
|
state.tableData.data.storeFilename = files.name; |
|
} else if (name.includes('dead') ) { |
|
state.tableData.data.deadFilename = files.name; |
|
} else if (name.includes('decoration')) { |
|
state.tableData.data.decorationFilename = files.name; |
|
} else { |
|
state.tableData.data.filename = files.name; |
|
} |
|
state.tableData.fileNames.push(files.name); |
|
}; |
|
const beforeRemove = (file, fileList) => { |
|
console.log('beforeRemove: ', file, fileList); |
|
return confirm(`确定移除 ${file.name}? ${fileList.length}`); |
|
}; |
|
const copyUnit = () => { |
|
console.log('state.tableData.data: ', state.tableData.data); |
|
state.loading = true; |
|
state.loading1 = true; |
|
state.loading2 = true; |
|
state.loading3 = true; |
|
state.disabled = false; |
|
state.tableData.fileNames = []; |
|
state.tableData.downloadFiles = []; |
|
gameGMCopyUnit({ |
|
SrcName: state.tableData.data.SrcName, |
|
SrcServer: state.tableData.data.SrcServer, |
|
}) |
|
.then((res) => { |
|
ElMessage.success('修改成功'); |
|
console.log('copy: ', res); |
|
state.tableData.data.filename = res.data.filename; |
|
state.tableData.data.storeFilename = res.data.storeFilename; |
|
state.tableData.data.deadFilename = res.data.deadFilename; |
|
state.tableData.data.decorationFilename = res.data.decorationFilename; |
|
state.tableData.fileNames.push(res.data.filename); |
|
state.tableData.fileNames.push(res.data.storeFilename); |
|
state.tableData.fileNames.push(res.data.deadFilename); |
|
state.tableData.fileNames.push(res.data.decorationFilename); |
|
state.tableData.downloadFiles.push(res.data.filename); |
|
state.tableData.downloadFiles.push(res.data.storeFilename); |
|
state.tableData.downloadFiles.push(res.data.deadFilename); |
|
state.tableData.downloadFiles.push(res.data.decorationFilename); |
|
if (res.data.filename != '') { |
|
state.filename = res.data.filename; |
|
state.storeFilename = res.data.storeFilename; |
|
state.deadFilename = res.data.deadFilename; |
|
state.decorationFilename = res.data.decorationFilename; |
|
|
|
console.log('gameRandomGenerateCode: ', res, state.filename, state.storeFilename, state.deadFilename, state.decorationFilename); |
|
timeInterval = setInterval(function () { |
|
checkGiftExchangeExists(); |
|
}, 1000); |
|
timeInterval1 = setInterval(function () { |
|
checkGiftExchangeExists1(); |
|
}, 1000); |
|
timeInterval2 = setInterval(function () { |
|
checkGiftExchangeExists2(); |
|
}, 1000); |
|
timeInterval3 = setInterval(function () { |
|
checkGiftExchangeExists3(); |
|
}, 1000); |
|
} |
|
}) |
|
.catch(() => { |
|
state.disabled = true; |
|
}) |
|
.finally(() => {}); |
|
}; |
|
|
|
const updateUnit = () => { |
|
console.log('state.tableData.data: ', state.tableData.data); |
|
gameGMUpdateUnit({ |
|
filename: state.tableData.data.filename, |
|
storeFilename: state.tableData.data.storeFilename, |
|
deadFilename: state.tableData.data.deadFilename, |
|
decorationFilename: state.tableData.data.decorationFilename, |
|
DestName: state.tableData.data.DestName, |
|
DestServer: state.tableData.data.DestServer, |
|
}) |
|
.then((res) => { |
|
ElMessage.success('修改成功'); |
|
console.log('update: ', res); |
|
}) |
|
.finally(() => {}); |
|
}; |
|
const delAccount = () => { |
|
ElMessageBox.prompt(`此操作将删除账号:“${state.tableData.del.SrcName}”,是否继续? 请输入密码`, '提示', { |
|
confirmButtonText: '确认', |
|
cancelButtonText: '取消', |
|
inputErrorMessage: 'Invalid password', |
|
// type: 'warning', |
|
}).then(({ value }) => { |
|
if (value == 0) { |
|
return; |
|
} |
|
state.tableData.del.password = value; |
|
console.log('state.tableData.data: ', state.tableData.del); |
|
gameGMDelAccount(state.tableData.del) |
|
.then(() => { |
|
ElMessage.success('删除成功'); |
|
}) |
|
.finally(() => {}); |
|
}); |
|
}; |
|
const resetPwd = () => { |
|
gameResetPwd(state.tableData.password) |
|
.then(() => { |
|
ElMessage.success('修改密码成功!'); |
|
}) |
|
.finally(() => {}); |
|
}; |
|
const clearResource = () => { |
|
console.log('state.tableData.resource: ', state.tableData.resource); |
|
gameGMClearResource(state.tableData.resource) |
|
.then(() => { |
|
ElMessage.success('删除成功'); |
|
}) |
|
.finally(() => {}); |
|
}; |
|
onMounted(() => { |
|
// initTableData(); |
|
serverList().then((res) => { |
|
state.servers = res; |
|
// console.log(" server : ", state.servers); |
|
}); |
|
}); |
|
const checkGiftExchangeExists = () => { |
|
giftExchangeExists({ file: state.filename }).then((response) => { |
|
console.log('checkGiftExchangeExists', state.filename, response); |
|
if (response.data.state == 1) { |
|
clearInterval(timeInterval); |
|
state.loading = false; |
|
} |
|
}); |
|
}; |
|
const checkGiftExchangeExists1 = () => { |
|
giftExchangeExists({ file: state.storeFilename }).then((response) => { |
|
console.log('checkGiftExchangeExists1', state.storeFilename, response); |
|
if (response.data.state == 1) { |
|
clearInterval(timeInterval1); |
|
state.loading1 = false; |
|
} |
|
}); |
|
}; |
|
const checkGiftExchangeExists2 = () => { |
|
giftExchangeExists({ file: state.deadFilename }).then((response) => { |
|
console.log('checkGiftExchangeExists2', state.deadFilename, response); |
|
if (response.data.state == 1) { |
|
clearInterval(timeInterval2); |
|
state.loading2 = false; |
|
} |
|
}); |
|
}; |
|
const checkGiftExchangeExists3 = () => { |
|
giftExchangeExists({ file: state.decorationFilename }).then((response) => { |
|
console.log('checkGiftExchangeExists3', state.decorationFilename, response); |
|
if (response.data.state == 1) { |
|
clearInterval(timeInterval3); |
|
state.loading3 = false; |
|
} |
|
}); |
|
}; |
|
|
|
const onDownload = () => { |
|
state.tableData.downloadFiles.forEach((url, i) => { |
|
setTimeout(function () { |
|
download(url); |
|
}, i * 1000); |
|
}); |
|
}; |
|
|
|
const download = (file: string) => { |
|
if (file) { |
|
console.log('download', file); |
|
|
|
let link = document.createElement('a'); |
|
link.href = baseURL + 'download_file?filename=' + file; |
|
link.setAttribute('download', ''); // 或者设置为具体的下载文件名 |
|
link.style.display = 'none'; |
|
document.body.appendChild(link); |
|
link.click(); |
|
document.body.removeChild(link); |
|
} |
|
}; |
|
// 打开修改字典弹窗 |
|
const switchServer = () => { |
|
return gSwitchServer(state.serverSwitch, state.servers); |
|
}; |
|
return { |
|
switchServer, |
|
onDownload, |
|
handleRemove, |
|
handleChange, |
|
handlePreview, |
|
handleExceed, |
|
beforeRemove, |
|
resetPwd, |
|
copyUnit, |
|
updateUnit, |
|
delAccount, |
|
clearResource, |
|
...toRefs(state), |
|
}; |
|
}, |
|
}); |
|
</script>
|
|
|